C++-Cmake指令:add_custom_target【增加一个没有输出的目标,使得它总是被构建】
2023-09-27 14:20:39 时间
一、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博客
相关文章
- 解答私信@被c++折磨头秃的花季美少女 //C++ 利用指针数组输入10个单词,编写函数对10个单词进行排序并输出,要求判断是否有相同的单词,如果有相同的单词在输出时该单词只输出一次。
- 笔记:windows环境下线程编程(C++实现同步与互斥)
- 使用C++将数据输出.mat文件
- C++:输出字符串实训
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- 方法输出C++输出斐波那契数列的几种方法
- C++——流类库和输入/输出
- 菜鸟教程-所有软件教学都有【python、java、c、c++、html、sql、css、jquery、bootstrap、vue、c#、go】
- cc++汉字的输出
- 传智播客 C/C++学习笔记 二级指针作为输出参数以及空间的释放
- C++拷贝构造函数详解
- C++输出九九乘法表
- 10道C++输出易错笔试题收集
- C++中类所占的存储空间
- vs2017混合调试py/c++
- jni和C++通信中文乱码的问题
- C++标准输入、输出
- 虚拟机安装中文Fedora14和C/C++IDE开发环境