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


    一、add_custom_target语法

    在很多时候,需要在cmake中创建一些目标,如cleancopy等等,这就需要通过add_custom_target来指定。同时,add_custom_command可以用来完成对add_custom_target生成的target的补充。

    add_custom_target的用处:增加一个没有输出的目标,使得它总是被构建

    1. add_custom_target(Name [ALL] [command1 [args1...]]
    2. [COMMAND command2 [args2...] ...]
    3. [DEPENDS depend depend depend ... ]
    4. [BYPRODUCTS [files...]]
    5. [WORKING_DIRECTORY dir]
    6. [COMMENT comment]
    7. [JOB_POOL job_pool]
    8. [VERBATIM] [USES_TERMINAL]
    9. [COMMAND_EXPAND_LISTS]
    10. [SOURCES src1 [src2...]])

    该命令的其他一些参数的含义:

    • ALL:表明该目标会被添加到默认的构建目标,使得它每次都被运行;
    • COMMAND:指定要在构建时执行的命令行;
    • DEPENDS:指定命令所依赖的文件;
    • COMMENT:在构建时执行命令之前显示给定消息;
    • WORKING_DIRECTORY:使用给定的当前工作目录执行命令。如果它是相对路径,它将相对于对应于当前源目录的构建树目录;
    • BYPRODUCTS:指定命令预期产生的文件。

    二、add_custom_target案例

    add_custom_target创建target,用于make。 例子:

    1. cmake_minimum_required(VERSION 3.0)
    2. project(test)
    3. add_custom_target(CopyTask
    4. COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/config
    5. ${CMAKE_CURRENT_SOURCE_DIR}/etc
    6. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/log.txt
    7. ${CMAKE_CURRENT_SOURCE_DIR}/etc
    8. )

    初始目录结构:

    1. |---build
    2. |---config
    3. |---log.log
    4. |---CMakeLists.txt
    5. |---log.txt

    运行上述CMakeList.txt文件:

    1. mkdir build && cd build
    2. cmake ..
    3. make CopyTask

    运行后目录结构,如下:

    1. |---build
    2. |---config
    3. |---log.log
    4. |---etc
    5. |---log.log
    6. |---log.txt
    7. |---CMakeLists.txt
    8. |---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博客

  • 相关阅读:
    SpringBoot2.0---------------1、Spring与SpringBoot
    REDIS00_详解redis.conf配置文件
    比较器? 如何使用比较器? 如何自定义比较器?
    通俗易懂:窗口函数 | 全是案例
    指针进阶(1)
    特征工程完整指南 - 第二部分
    网络安全中攻击溯源方法
    腾讯安全在2022:出租车、地铁和爆发的火山
    Linux下线程间通讯--互斥锁
    anaconda pip下载使用不了镜像,报错
  • 原文地址:https://blog.csdn.net/u013250861/article/details/127938112