码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++-Cmake指令:add_custom_target【增加一个没有输出的目标,使得它总是被构建】


    一、add_custom_target语法

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

  • 相关阅读:
    产业生态重构,数字孪生角色意味着什么?
    web前端网页课程设计大作业 html+css+javascript天津旅游(11页) dw静态旅游网页设计实例 企业网站制作
    ref的使用
    从编写操作系统的角度看上下文切换
    Altium Designer 19 20 多层板内电层缩进
    QT提示适配器未调用怎么办?
    如何快速掌握JVM调优的基本方法和工具,如JConsole和VisualVM
    工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计
    1282. 用户分组
    JAVA设计模式8:装饰模式,动态地将责任附加到对象上,扩展对象的功能
  • 原文地址:https://blog.csdn.net/u013250861/article/details/127938112
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号