我有一个“依赖多个目标”的目标。为了构建最终的可执行文件,我需要进行一些检查。如果这些都失败了,那么我想避免建立长期目标。所以我做到了:
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是首先构建的,并且检查仅在之后失败。看来这是因为(至少)在VS上不充分支持PRE_BUILD标志。
所以我尝试了:
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。因此,我想在遇到错误时立即中止构建。