CMake生成器表达式评估为空字符串

时间:2018-12-06 14:45:20

标签: visual-studio cmake

我正在借助CMake 3.13.1构建一个简单的VS2017 C ++项目

考虑我用特定于配置的生成器表达式填写的CMake列表类型:

foreach(config ${configuration_types})
     assign_config_host_flags(host_flags ${config})
     foreach(f ${host_flags})
        list(APPEND flags $<$<CONFIG:${config}>:-Xcompiler> $<$<CONFIG:${config}>:${f}>)
     endforeach()
endforeach()

${configuration_types}包含两个配置:“ Debug”和“ Release”;

assign_config_host_flags(...)是一个宏(这里实际上是伪代码),它用特定于配置的标志填充${host_flags}。例如,${host_flags}包含诸如“调试”的/MDd或“发布”的/MD之类的条目。假设每个特定于配置的${host_flags}仅包含1个特定条目(/MDd/Md)。

现在,我正在构建一个自定义构建步骤,该步骤仅打印${flags}的输出(例如,它可能是编译器选项):

add_custom_command(
...
  COMMAND echo ${flags}
...
)

想法是前面提到的命令仅用于打印符合构建配置的条目,例如调试或发布。

构建调试配置时会发生什么,就是当调用上面的命令时,会产生以下输出:

-Xcompiler /MDd "" "" 

两个双引号来自我有两个构建配置的事实:调试和发布。这意味着两个生成器表达式$<$<CONFIG:${config}>:-Xcompiler>$<$<CONFIG:${config}>:${f}>的计算结果为空字符串,因为当前构建CONFIG是“ Debug”,而当前(遍历循环)${config}成为“发布”。


问题:是否有办法摆脱这两个双引号,而只保留与当前构建配置相关的选项?如果我要制作一个将add_custom_command传递给编译器的自定义生成步骤(另一个${flags}),这些空的双引号字符串可能会特别讨厌。

最后,当我在构建Debug配置时调用上述自定义命令时,我想观察以下输出:

-Xcompiler /MDd 

当我构建发布配置时:

-Xcompiler /MD 

0 个答案:

没有答案