如何在premake5中获取当前状态?

时间:2017-07-16 11:45:52

标签: premake

在我的Premake5脚本中,我正在实现一个函数,该函数将根据当前设置返回一个boost库的名称(如果是调试配置,你将-gd,如果你是-mt想要多线程等等)。在我第一次尝试时我得到了这个:

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 }

但是如果名称可以包含只能通过“过滤器”访问的多个变量,这种方法会产生问题。

是否可以以标准(即非hacky)方式访问当前的预制状态?或者后者(更具声明性,我猜)是首选方式?

编辑清晰度:

  1. 主要问题是:是否可以在lua中使用预制状态(例如当前配置名称)(例如在if表达式中)?即我将EXPRESSION_HERE用什么来使下面的代码工作:

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

  3. Boost库的命名方式不同,具体取决于它们的构建配置。另外,它们在windows和linux下有不同的名称。

    • boost_atomic-vc141-mt-1_64.lib是Boost Atomic,多线程使用Boost 1.64 dll .lib伴侣的Visual Studio 1.41工具集构建,
    • libboost_prg_exec_monitor-vc141-mt-gd-1_64.lib是Boost PrgExecMonitor,具有使用Boost 1.64静态库中的Visual Studio 1.41工具集构建的多线程和调试符号,
    • libboostt_prg_exec_monitor-mt-gd.lib与Linux(AFAIR)
    • 上的内容相同

    我觉得将最终的库名称构造为在特定情况下添加到名称的一系列if是很自然的(例如,如果我们想要调试符号,则添加-gd)。我知道这可以使用令牌和filter下的字符串连接,但这是唯一的方法吗?如果这是最好的方式,为什么呢?

1 个答案:

答案 0 :(得分:2)

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

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

关于你的评论:

  

我想要一个包含当前配置名称的字符串,或者当前项目的输出文件路径等,以便我可以用它调用lua函数(例如os.copyfile)

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

我会尝试整理一个示例,但要复制您要查看postbuildcommandscommand tokens的文件。