在我的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为了清楚:
的主要问题是:是否有可能使用 “在LUA” premake的状态(例如,当前配置名称)(例如在一个
if
表达) ?即我该怎么把为EXPRESSION_HERE
使下面工作的代码:if (EXPRESSION_HERE) then print("Executed only in Debug* configurations"); end
理由:
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
下,但它是唯一的方法?如果这是最好的方法,那为什么?
感谢您的回复,我试图澄清我原来的问题。 – mikosz
我用配置名称令牌更新了我的答案。 – starkos
谢谢,但那仍然不能回答我的问题。我明白,并在提出的情况下,确实可以使用令牌,但不是在所有情况下。我的问题是关于把预制状态变成lua。我想要一个包含当前配置名称或当前项目的输出文件路径等的字符串,以便我可以用它调用一个lua函数(例如os.copyfile)。在某些情况下,我可以使用全局变量(_OS,_OPTIONS,_WORKING_DIR),但没有足够的。 – mikosz