zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++-Cmake指令:add_custom_target【增加一个没有输出的目标,使得它总是被构建】

C++输出 一个 构建 没有 指令 目标 增加
2023-09-27 14:20:39 时间

一、add_custom_target语法

在很多时候,需要在cmake中创建一些目标,如cleancopy等等,这就需要通过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博客

add_custom_target — CMake 3.0.2 Documentation

CMake之add_custom_target_kendyChina的博客-CSDN博客