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

前端 未结 2 1851
梦谈多话
梦谈多话 2021-02-05 12:14

In buildem_cmake_recipe.cmake, I saw an expression:

    externalproject_add_step(${_name} BuildOtherConfig
                        COMMAND ${CMAKE_COMMAND} --bui         


        
相关标签:
2条回答
  • 2021-02-05 12:40

    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_configuration == "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>
    
    0 讨论(0)
  • 2021-02-05 12:48

    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.

    0 讨论(0)
提交回复
热议问题