在很多时候,需要在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(CopyTask
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${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
- )
初始目录结构:
- |---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博客