Dmitrii Motorygin
Dmitrii Motorygin

Reputation: 516

CMake: How to add a custom variable for user macro with a value that depends on build configuration?

I use CMake version 3.16.

I tried the following:

set_property(TARGET ${PLUGIN_NAME} PROPERTY VS_GLOBAL_FR_VERSION 
    $<$<CONFIG:Debug2017>:"2017">
    $<$<CONFIG:Release2017>:"2017">
    $<$<CONFIG:Debug2018>:"2018">
    $<$<CONFIG:Release2018>:"2018">
    $<$<CONFIG:Debug2019>:"2019">
    $<$<CONFIG:Release2019>:"2019">
)

And it kind of worked...

This variable (FR_VERSION) is supposed to be used in a script that is launched after build. This is how it looks:

add_custom_command(TARGET ${PLUGIN_NAME} POST_BUILD
    COMMAND echo $(FR_VERSION)
    COMMENT "This command will copy files to dist"
    VERBATIM
)

In Visual Studio, however, we got the following:

echo $<$<CONFIG:Debug2017>:"2017">;$<$<CONFIG:Release2017>:"2017">;$<$<CONFIG:Debug2018>:"2018">;$<$<CONFIG:Release2018>:"2018">;$<$<CONFIG:Debug2019>:"2019">;$<$<CONFIG:Release2019>:"2019">

which fails to execute with the error message:

"The syntax of the command is incorrect."

If I don't try to set a different value for different build configs like this:

set_target_properties(${MAYA_PLUGIN_NAME} PROPERTIES VS_GLOBAL_FR_MAYA_VERSION "2018")

then the post-build script is generated as expected. (But this is not acceptable to me, because I need different parameter values for different build configurations).

I would appreciate any advice at this point.

Upvotes: 1

Views: 566

Answers (1)

Kevin
Kevin

Reputation: 18323

Some target properties support generator expressions, while others do not. The documentation for a property will explicitly say that generator expressions are supported. Take the COMPILE_FEATURES property, for example:

Contents of COMPILE_FEATURES may use “generator expressions” with the syntax $<...>.

The documentation for VS_GLOBAL_<variable> does not have such language. Thus, as suggested, you can put the generator expression directly in the add_custom_command() call, which is supported:

add_custom_command(TARGET ${PLUGIN_NAME} POST_BUILD
    COMMAND echo $<$<CONFIG:Debug2017>:"2017">
        $<$<CONFIG:Release2017>:"2017">
        $<$<CONFIG:Debug2018>:"2018">
        $<$<CONFIG:Release2018>:"2018">
        $<$<CONFIG:Debug2019>:"2019">
        $<$<CONFIG:Release2019>:"2019">
    COMMENT "This command will copy files to dist"
)

Upvotes: 2

Related Questions