What does “$<$<CONFIG:Debug>:Release>” mean in cmake?

六眼飞鱼酱① 提交于 2021-01-20 18:04:03

问题


In buildem_cmake_recipe.cmake, I saw an expression:

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

What does the $<$<CONFIG:Debug>:Release>$<$<CONFIG:Release>:Debug> mean here?


回答1:


That's a CMake generator expression. You can follow the link for a full discussion of what these are and what they can do. In short, it's a piece of text which CMake will evaluate at generate time (when it's done parsing all CMakeLists and is generating the buildsystem); it can evaluate to a different value for each configuration.

The one you have there means roughly this (pseudo-code):

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

So, if the current configuration is Debug, the whole expression will evaluate to Release. If the current configuration's Release, it will evaluate to Debug. Notice that the step being added is called "BuildOtherConfig," so this inverted logic makes sense.


How it works, in a little more detail:

$<CONFIG:Debug>

This will evaluate to a 1 if the current config is Debug, and to a 0 otherwise.

$<1:X>

Evaluates to X.

$<0:X>

Evaluates to an empty string (no value).

Putting it together, we have $<$<CONFIG:Debug>:Release>. When the current config is Debug, it evaluates like this:

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

When the current config is not Debug, it evaluates like this:

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



回答2:


Expressions like $<...> are generator exressions, introduced in CMake 2.8. The main feature of these expressions is that they are evaluated at build time, not at configuration time, like normal CMake variables.

Your particular expression

$<$<CONFIG:Debug>:Release>

expands to "Release" if Debug configuration is in use.



来源:https://stackoverflow.com/questions/34490294/what-does-configdebugrelease-mean-in-cmake

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!