Как заставить CMake потерпеть неудачу при первой ошибке - PullRequest
0 голосов
/ 17 января 2019

У меня есть цель «долго строить» со многими зависимостями. Чтобы построить окончательный исполняемый файл, мне нужно сделать несколько проверок. Если они терпят неудачу, то я хочу избежать построения длинной цели. Итак, я сделал:

add_custom_target(LongTarget)
add_custom_command(TARGET LongTarget
    COMMAND ${CMAKE_COMMAND} -E echo "BUILDING LongTarget")

add_custom_target(FinalTarget)
add_dependencies(FinalTarget LongTarget)
add_custom_command(TARGET FinalTarget PRE_BUILD
    COMMAND "CHECKS_FAIL")
add_custom_command(TARGET FinalTarget POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E echo "BUILDING FinalTarget")

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

Итак, я попробовал:

add_custom_target(LongTarget)
add_custom_command(TARGET LongTarget
    COMMAND ${CMAKE_COMMAND} -E echo "BUILDING LongTarget")

add_custom_target(ChecksTarget)
add_custom_command(TARGET ChecksTarget COMMAND "CHECKS_FAIL")

add_custom_target(FinalTarget)
add_dependencies(FinalTarget ChecksTarget LongTarget)
add_custom_command(TARGET FinalTarget POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E echo "BUILDING FinalTarget")

Теперь проверки запускаются первыми (и не выполняются), но LongTarget все равно создается. Поэтому я хотел бы прервать сборку, как только возникнет ошибка.

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