CMake: Как добавить пользовательскую переменную для пользовательского макроса со значением, которое зависит от конфигурации сборки? - PullRequest
1 голос
/ 24 января 2020

Я использую CMake версии 3.16.

Я пробовал следующее:

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">
)

И это вроде сработало ...

Предполагается, что эта переменная (FR_VERSION) для использования в скрипте, который запускается после сборки. Вот как это выглядит:

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

Однако в Visual Studio мы получили следующее:

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

, которое не выполняется с сообщением об ошибке:

"The syntax of the command is incorrect."

Если я не попытаюсь установить другое значение для разных конфигураций сборки, например:

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

, то сценарий после сборки будет сгенерирован, как и ожидалось. (Но это неприемлемо для меня, потому что мне нужны разные значения параметров для разных конфигураций сборки).

Буду признателен за любые советы на данный момент.

1 Ответ

2 голосов
/ 24 января 2020

Некоторые целевые свойства поддерживают выражения генератора, а другие нет. Документация для свойства будет явно сообщать, что выражения генератора поддерживаются. Возьмите свойство COMPILE_FEATURES, например:

Содержимое COMPILE_FEATURES может использовать «выражения генератора» с синтаксисом $<...>.

В документации для VS_GLOBAL_<variable> такого языка нет. Таким образом, как и предполагалось, вы можете поместить выражение генератора непосредственно в вызов add_custom_command(), который поддерживается:

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"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...