什么是“$&lt; $ <config:debug>:Release&gt;”在cmake意味着什么?

时间:2015-12-28 08:47:14

标签: cmake

buildem_cmake_recipe.cmake中,我看到了一个表达式:

    externalproject_add_step(${_name} BuildOtherConfig
                        COMMAND ${CMAKE_COMMAND} --build ${BINARY_DIR} --config "$<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>" --target INSTALL
                        DEPENDEES install
                        )

$<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug>在这里意味着什么?

2 个答案:

答案 0 :(得分:11)

这是一个CMake generator expression。您可以点击链接,全面讨论这些内容以及它们可以执行的操作。简而言之,它是CMake将在生成时评估的一段文本(当它完成解析所有CMakeLists并生成构建系统时);它可以为每个配置评估不同的值。

你所拥有的那个大致意味着这个(伪代码):

if current_configuration == "Debug"
  output "Release"
if current_configureation == "Release"
  output "Debug"

因此,如果当前配置为Debug,则整个表达式将计算为Release。如果当前配置发布,它将评估为Debug。请注意,正在添加的步骤称为&#34; BuildOtherConfig,&#34;所以这种倒置的逻辑是有道理的。

如何运作,更详细一点:

$<CONFIG:Debug>

如果当前配置为1,则评估为Debug,否则评估为0

$<1:X>

评估为X

$<0:X>

评估为空字符串(无值)。

把它放在一起,我们有$<$<CONFIG:Debug>:Release>。当前配置为Debug时,其评估结果如下:

$<$<CONFIG:Debug>:Release>
$<1:Release>
Release

当前配置不是Debug时,它的评估结果如下:

$<$<CONFIG:Debug>:Release>
$<0:Release>

答案 1 :(得分:0)

$<...>这样的表达式是generator exressions,在CMake 2.8中引入。这些表达式的主要特征是它们在构建时评估,而不是在配置时评估,就像普通的CMake变量一样。

你的特殊表达

$<$<CONFIG:Debug>:Release>

扩展到&#34;发布&#34;如果正在使用Debug配置。