码农知识堂 - 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博客

  • 相关阅读:
    Java设计模式:Callback
    为什么学了老忘,计算机怎么学,未来什么方向,如何选择
    Vue——计算属性(计算属性简介、计算属性和方法的区别:(面试)、关于计算属性 函数什么情况下调用、案例)
    CV系列汇总记录【满满的回忆杀】
    基于springboot+vue的在线音乐播放点播分享平台 elementui
    【882. 细分图中的可到达节点】
    实战|如何低成本训练一个可以超越 70B Llama2 的模型 Zephyr-7B
    最长公共子序列(LCS)与最长上升子序列(LIS)问题的相互转换
    Unity Debug的简单封装
    java-net-php-python-jsp小家蔬菜展示平台计算机毕业设计程序
  • 原文地址:https://blog.csdn.net/u013250861/article/details/127938112
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号