У меня есть цель «долго строить» со многими зависимостями. Чтобы построить окончательный исполняемый файл, мне нужно сделать несколько проверок. Если они терпят неудачу, то я хочу избежать построения длинной цели. Итак, я сделал:
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 все равно создается. Поэтому я хотел бы прервать сборку, как только возникнет ошибка.