在很多时候,需要在cmake
中创建一些目标,如clean
、copy
等等,这就需要通过add_custom_target
来指定。同时,add_custom_command
可以用来完成对add_custom_target
生成的target
的补充。
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
创建target,用于make。 例子:
cmake_minimum_required(VERSION 3.0)
project(test)add_custom_target(CopyTaskCOMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/config ${CMAKE_CURRENT_SOURCE_DIR}/etcCOMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/log.txt ${CMAKE_CURRENT_SOURCE_DIR}/etc)
初始目录结构:
|---build
|---config|---log.log
|---CMakeLists.txt
|---log.txt
运行上述CMakeList.txt文件:
mkdir build && cd build
cmake ..
make CopyTask
运行后目录结构,如下:
|---build
|---config|---log.log
|---etc|---log.log|---log.txt
|---CMakeLists.txt
|---log.txt
其实可以看出,这段代码的目的就是将config
文件夹的内容和log.txt
文件复制到新的etc
文件夹内。
add_custom_target
生成一个目标CopyTask
,该目标是用来复制文件夹或者复制文件的!也就是COMMAND
中定义的操作。
即make target相当于执行后面的所有命令。
当然,生成文件不仅仅只能是复制,还可以是其他的操作。而这些COMMAND操作,都在command_line中规定了。
至于cmake_command_line
的内容,可参考cmake
的官方资料:Run a Command-Line Tool。
cmake的add_custom_target指令学习 - lypbendlf - 博客园
【CMake】cmake的add_custom_command和add_custom_target指令_Yngz_Miao的博客-CSDN博客
add_custom_target — CMake 3.0.2 Documentation
CMake之add_custom_target_kendyChina的博客-CSDN博客