add_custom_target

增加一个没有输出的目标,使得它总是被构建。

add_custom_target(Name [ALL] [command1 [args1...]]
				[COMMAND command2 [args2...] ...]
				[DEPENDS depend depend depend ...]
				[BYPRODUCTS [files...]]
				[WORKING_DIRECTORY dir]
				[COMMENT comment]
				[JOB_POOL job_pool]
				[VERBATIM] [USES_TERMINAL]
				[COMMAND_EXPAND_LISTS]
				[SOURCES src1 [src2...]]
)

一般情况下,只用到其中的两三个。

add_custom_target(CopyTask
COMMAND ${CMAKE_COMMAND} -E copy_director ${CMAKE_CURRENT_SOURCE_DIR}/config ${CMAKE_CURRENT_SOURCE_DIR}/etc

COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/log.txt
${CMAKE_CURRENT_SOURCE_DIR}/etc
)

根目录下config文件夹,或者有log.txt文件,那么文件夹内的文件和log.txt会拷贝到etc文件夹下。

${CMAKE_COMMAND}是CMake的路径,-E使得CMake运行命令而不是构建,
copy_directory和copy是cmake_command_line,后面两个参数是command_line的参数。

add_custom_command

为某个目标添加一个定制命令。

这种定制命令可以设置在,构建这个目标过程中的某些时机。