add_custom_command与add_custom_target配合使用
前者是添加了自定义命令,通常会有文件输出,其他的target可以依赖它生成的文件;
后者是定义一个自定义的target,可以与target相互依赖;
##
add_custom_command(
OUTPUT multi1-out2-copy.txt
COMMAND ${CMAKE_COMMAND} -E copy multi1-out2.txt multi1-out2-copy.txt
DEPENDS multi1-out2.txt
)
add_custom_target(multi1 ALL DEPENDS multi1-out2-copy.txt)
add_custom_target和ExternalProject_Add
ExternalProject_Add用于在构建过程中下载、编译、安装外部项目;
add_custom_target(PreSubdir1
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/PreSubdir1.txt
)
add_library(PreSubdir1Interface INTERFACE)
add_dependencies(PreSubdir1Interface PreSubdir1)
ExternalProject_Add(Subdir1
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Subdir1
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/Subdir1
CMAKE_ARGS -DNORMAL_VAR=NORMAL_VALUE -DGENEX_VAR=$<1:GENEX_VALUE>
LOG_CONFIGURE 1
BUILD_COMMAND ""
INSTALL_COMMAND ""
DEPENDS PreSubdir1Interface
)