CMake: Как добавить пользовательскую команду, которая выполняется только для одной конфигурации?
Я хочу добавить настраиваемую команду cmake, которая выполняется только тогда, когда настраиваемая цель создается в конфигурации отладки при использовании генератора мультиконфигурации Visual Studio. Есть ли чистый способ сделать это?
Чтобы реализовать это, я сначала попытался обернуть весь список команд в выражение генератора следующим образом.
add_custom_command(
...
COMMAND $<$<CONFIG:Debug>:cmake;-E;echo;foo>
)
Но это дает мне синтаксическую ошибку при выполнении команды. После некоторых проб и ошибок я получил следующее хакерское решение для работы. Это оборачивает каждое слово списка команд в выражение генератора, подобное этому.
add_custom_command(
...
COMMAND $<IF:$<CONFIG:Debug>,cmake,echo>;$<IF:$<CONFIG:Debug>,-E, >;$<IF:$<CONFIG:Debug>,echo, >;$<IF:$<CONFIG:Debug>,foo, >
)
Это выполняет cmake -E echo foo
команда при компиляции конфигурации Debug и фиктивная команда echo " " " " " "
для всех других конфигураций.
Это довольно уродливо, и фиктивная команда должна быть изменена в зависимости от хост-системы. В Linux это может быть ":" ":" ":" ":"
, Так есть ли более чистый способ сделать это?
Спасибо за ваше время!
1 ответ
Вот мой кусок кода (протестирован на нескольких платформах с одной и несколькими конфигурациями):
CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(DebugEchoFoo NONE)
string(
APPEND _cmd
"$<IF:$<CONFIG:Debug>,"
"${CMAKE_COMMAND};-E;echo;foo,"
"${CMAKE_COMMAND};-E;echo_append"
">"
)
add_custom_target(
${PROJECT_NAME}
ALL
COMMAND "${_cmd}"
COMMAND_EXPAND_LISTS
)
Примечание: COMMAND_EXPAND_LISTS
это ключевое слово доступно только с версией CMake>= 3.8