一、add_custom_target语法
在很多时候,需要在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...]])
该命令的其他一些参数的含义:
- ALL:表明该目标会被添加到默认的构建目标,使得它每次都被运行;
- COMMAND:指定要在构建时执行的命令行;
- DEPENDS:指定命令所依赖的文件;
- COMMENT:在构建时执行命令之前显示给定消息;
- WORKING_DIRECTORY:使用给定的当前工作目录执行命令。如果它是相对路径,它将相对于对应于当前源目录的构建树目录;
- BYPRODUCTS:指定命令预期产生的文件。
二、add_custom_target案例
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
中定义的操作。
- target是后面的命令的目标。
- command就是生成目标文件的命令,一般就是编译命令。
即make target相当于执行后面的所有命令。
- 上面的命令为将config目录下的内容拷贝到etc目录下,将log.txt文件拷贝到etc目录下。
- ${CMAKE_COMMAND}是CMake的路径,
- -E使CMake运行命令而不是构建
- copy_directory和copy是cmake_command_line,再后面两个就是command_line的参数
当然,生成文件不仅仅只能是复制,还可以是其他的操作。而这些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博客