CMake add_custom_command Поддержка OUTPUT для типа сборки / конфигурации - PullRequest
1 голос
/ 13 января 2020

Я хочу, чтобы add_custom_command() выдавал разные выходные данные в зависимости от того, собираюсь ли я для Debug или Release (с поддержкой многоконфигурационных сборок Visual Studio).

По сути, я хочу чего-то добиться как:

add_custom_command(
    OUTPUT $<IF:$<CONFIG:Debug>, file_to_generate_in_debug, file_to_generate_in_release>
    COMMAND something.exe
    ...
)

К сожалению, выражения генератора не поддерживаются для аргумента OUTPUT.

Как мне это сделать, используя Modern CMake?


Чтобы сделать более конкретно, я пытаюсь запустить windeployqt.exe, и мой вывод должен быть либо Qt5Core.dll, либо Qt5Cored.dll в зависимости от фактической конфигурации сборки (которая может быть известна во время настройки (например, для ниндзя) или в Время генерации (например, для Visual Studio)).

1 Ответ

1 голос
/ 14 января 2020

Создайте столько add_custom_command, сколько различно ВЫХОД , которое необходимо произвести.

# A command which can be applied for Debug configuration(s)
add_custom_command(
    OUTPUT file_to_generate_in_debug
    COMMAND something.exe
    ...
)
# A command which can be applied for Release configuration(s)
add_custom_command(
    OUTPUT file_to_generate_in_release
    COMMAND something.exe
    ...
)

Только тот экземпляр будет активен в указанной c конфигурации, которая ВЫХОД используется как ЗАВИСИТ в (другие) add_custom_command / add_custom_target. В отличие от OUTPUT , DEPENDS предложение поддерживает выражения генератора.

# This will chose a command suitable for configuration
add_custom_target(MY_GEN_LIB
   DEPENDS $<IF:$<CONFIG:Debug>, file_to_generate_in_debug, file_to_generate_in_release>
)

Если какой-то другой цели нужен ваш файл, зависящий от конфигурации, вы можете настроить целевой уровень зависимости:

# Depends from the target which produces required file
add_dependencies(other_target MY_GEN_LIB)

Это будет работать, даже если другой целью является IMPORTED .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...