2017-07-16 37 views
0

在我的Premake5脚本中,我实现了一个函数,它将根据当前设置返回一个boost库的名称(如果它是调试配置,您将拥有-gd,如果需要多线程,则将拥有-mt等)。在我第一次尝试,我得到这个:如何获得premake5中的当前状态?

name = "boost_" .. name 
... 
filter "configurations:Debug*" 
    name = name .. "-gd" 
... 
links { name } 

这显然是不正确:-gd将我们是否正在评估调试配置或不被追加到名称。类似的东西:

name = "boost_" .. name 
... 
if (CONFIGURATION.MATCHES_FILTER("Debug*")) 
    name = name .. "-gd" 
... 
links { name } 

会使它工作,但我找不到方法来轻松访问当前配置。有configuration().current,但它没有记录,似乎不是“应该完成的方式”,因此可能会在未来的预发布​​版本中停止工作。

我可以这样做:

name = "boost_" .. name 
... 
filter "configurations:Debug*" 
    links { name .. "-gd" } 
filter "configurations:Release*" 
    links { name } 

但这种方法将使问题,如果名字可能包含只能通过“过滤器”访问的多个变量。

是否有可能以标准(即非哈希)方式访问当前的预制状态?或者后者(更具说明性,我猜)的方式更受欢迎?


EDIT为了清楚:

  1. 的主要问题是:是否有可能使用 “在LUA” premake的状态(例如,当前配置名称)(例如在一个if表达) ?即我该怎么把为EXPRESSION_HERE使下面工作的代码:

    if (EXPRESSION_HERE) then 
        print("Executed only in Debug* configurations"); 
    end 
    
  2. 理由:

Boost库取决于他们建立与配置的命名不同。另外,他们在windows和linux下有不同的名字。

  • boost_atomic-vc141-mt-1_64.lib是升压原子与Visual Studio的1.41工具集构建与Boost 1.64 DLL的.lib伴侣多线程,
  • libboost_prg_exec_monitor-vc141-mt-gd-1_64.lib是升压PrgExecMonitor与升压1.64静态库,
  • 与Visual Studio内置1.41工具集多线程和调试符号
  • libboostt_prg_exec_monitor-mt-gd.lib将是相同的Linux之上(AFAIR)下

感觉自然对我来说,构建最终库的名称作为系列的if s在特定情况下(例如如果我们需要调试符号,则添加-gd)。我知道这是可能的使用令牌和通过字符串连接filter下,但它是唯一的方法?如果这是最好的方法,那为什么?

回答

1

Tokens是应用这种逻辑的方式。

filter "configurations:Debug*" 
    links { "boost_%{cfg.name}-gd" } 

至于您的评论:

我想包含当前配置的名称,或当前项目的输出文件的路径等,这样我可以再调用它一个Lua函数的字符串(如OS .copyfile)

这是不可能的,因为在脚本运行时没有“当前”配置。这只有在您的脚本完成并且正在生成目标文件后才能实现。

我会尝试放在一起的例子,但复制文件,你要看看postbuildcommandscommand tokens

+0

感谢您的回复,我试图澄清我原来的问题。 – mikosz

+0

我用配置名称令牌更新了我的答案。 – starkos

+0

谢谢,但那仍然不能回答我的问题。我明白,并在提出的情况下,确实可以使用令牌,但不是在所有情况下。我的问题是关于把预制状态变成lua。我想要一个包含当前配置名称或当前项目的输出文件路径等的字符串,以便我可以用它调用一个lua函数(例如os.copyfile)。在某些情况下,我可以使用全局变量(_OS,_OPTIONS,_WORKING_DIR),但没有足够的。 – mikosz

相关问题