Cmake常用指令

2023-05-16

1、SET

SET(<variable><value> ... CACHE <type> <docstring> [FORCE])

将缓存条目variable设置为值<value>...,除非用户进行设置或者使用了选项FORCE,默认情况下缓存条目的值不会被覆盖。缓存条目可以通过CMAKE的GUI界面的add entry按钮来增加。缓存条目的实质为可以跨层级实现传递的变量,类似于全局变量。

缓存条目的<type>主要有以下几类:

BOOl

FILEPATH

STRING/STRINGS:文本行,CMAKE的GUI界面对此类缓存条目会提供一个文本框

INTERNAl:文本行,只用于内部,不对外呈现,主要用于运行过程中存储变量,因此使用该类意味着使用FORCE

缓存条目的几个注意事项:

1)如果变量先前未定义或者使用了FORCE选项,则缓存条目会被直接赋值

2)可以使用cmake的-D选项直接给缓存条目赋值,这样CMakeList.txt内的set命令只会为缓存条目添加类型。

3)如果变量类型为目录或者文件类型,通过-D选项传入的若只是相对路径,那么set会将相对路径变成绝对路径。

2、configure_file

configure_file指令通过读取文件中的内容,将CMakeLists.txt文件中的变量转为C/C++中可识别的宏定义,然后存入另外一个文件中。其语法格式如下。其中,input为输入的文件,output为输出的文件,其中,输入文件为xxx-config.h.in,输出文件为xxx-config.h

configure_file("${PROJECT_SOURCE_DIR}/versionInfo.rc.in" "${MY_VERSIONINFO}")

3、AUX_SOURCE_DIRECTORY

aux_source_directory(<dir> <variable>)

搜集所有在指定路径下的源文件的文件名,并将输出结果列表储存在指定的变量中。

# 查找当前目录下的所有源文件
# 并将名称保存到 SRC_LIST变量
aux_source_directory(. SRC_LIST)

add_executable(${TARGET} ${SRC_LIST})

不过这个方法也有它的缺点,就是把当前目录下的源文件都添加到变量SRC_LIST上了,并且只能检测目录下的cpp文件。如果我们不需要一些文件,可以进行这样操作:

set(SRC_LIST 
    ./main.c
    ./test1.c
    ./test2.c
    )

4、set_target_properties

set_target_properties(target1 target2 ...
                      PROPERTIES prop1 value1
                      prop2 value2 ...)

sets properties on targets.这句命令是列出所有你想要改变的目标,然后提供你想要设定的值。你可以使用任意你想要的属性值然后通过get_property()get_target_property()提取

SET_TARGET_PROPERTIES(${TARGET} PROPERTIES VERSION "${VERSION_FLAG}")
SET_TARGET_PROPERTIES(${TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TARGET_BIN_OUTPUT_PATH}")

SET_TARGET_PROPERTIES(${TARGET} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY 
"${TARGET_OUTPUT_NAME}")

SET_TARGET_PROPERTIES(${TARGET} PROPERTIES FOLDER "${FOLDER_PATH}")

RUNTIME_OUTPUT_DIRECTORY:指明了运行时目标文件应该建立的位置

ARCHIVE_OUTPUT_DIRECTORY:指明了已经完成的目标文件应该建立的位置

FOLDER:设定文件夹名称。用来在IDE中组织目标,目标没有FOLDER属性将会出现在顶级目录。targets连上相同的FOLDER属性值将会出现在文件名相邻的两边。

5、TARGET_LINK_LIBRARIES

指明使用的库或者标志当链接到给定的目标或者他的依赖对象。

target_link_libraries(<target>...<item>...)

6、ADD_DEPENDENCIES

功能同target_link_libraries,但依赖库没有时,target_link_libraries会报错。用到的情况就是两个target有依赖关系并且依赖库也是通过编译源代码产生的,这时候可以通过add_dependencies在直接编译上层target时,自动检查下层依赖库是否已经生成。没有的话先编译下层依赖库,再编译上层target,最后link。


7、file指令

file(GLOB HEADERS "./*.h" "./*.hpp")
source_group("include" FILES ${HEADERS})

file指令可以包含所需要的文件 

8、add_definitions命令

add_definitions(-DFOO -DBAR)

//用于添加编译器命令行标志(选项),通常情况下我们使用其来添加预处理器定义

参考:

target_link_libraries — CMake 3.22.6 Documentation

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cmake常用指令 的相关文章

  • TensorFlow on Android:物体识别

    运营专题 零预算引爆个人和企业品牌 原文链接 Selenium 自动化测试从零实战 原文链接 原来这样做 xff0c 才能向架构师靠近 原文链接 Cordova App 打包全揭秘 原文链接 TensorFlow on Android xf
  • Jetson Xavier NX can通信,拒绝误导!

    概述 最近在开发一个网关项目 xff0c 需要调试一些通信接口 网关底板是基于jetson xavier nx设计的 xff0c 所以硬件上许多相似 xff0c 所以我也会基于jetson xavier nx去做一些接口的测试 xff0c
  • TensorFlow on Android:训练模型

    文章推荐 运营专题 零预算引爆个人和企业品牌 原文链接 Selenium 自动化测试从零实战 原文链接 原来这样做 xff0c 才能向架构师靠近 原文链接 Cordova App 打包全揭秘 原文链接 TensorFlow on Andro
  • 深入理解 MySQL 底层实现

    本文来自作者 默默 在 GitChat 上分享 深入理解 MySQL 底层实现 xff0c 阅读原文 查看交流实录 文末高能 编辑 哈比 MySQL 的常用引擎 1 InnoDB InnoDB 的存储文件有两个 xff0c 后缀名分别是 f
  • 修改订单金额!?0.01 元购买 iPhoneX?| Web谈逻辑漏洞

    本文来自作者 肖志华 在 GitChat 上分享 Web 安全恩仇录 xff1a 再谈逻辑漏洞 xff0c 阅读原文 查看交流实录 文末高能 编辑 哈比 Web 漏洞里有 SQL 注入 XSS 等漏洞 xff0c 但是逻辑漏洞等问题也是一个
  • 如何开发一款游戏:游戏开发流程及所需工具

    本文来自作者 goto先生 在 GitChat 上分享 如何开发一款游戏 xff1a 游戏开发流程及所需工具 编辑 哈比 游戏作为娱乐生活的一个方面 xff0c 参与其中的人越来越多 xff0c 而大部分参与其中的人都是以玩家的身份 他们热
  • 如何用 Python 做自动化测试

    本文来自作者 Vant 在 GitChat 上分享 如何用 Python 做自动化测试 编辑 哈比 一 Selenium 环境部署 1 window 环境部署 1 1 当前环境 Win10 64 位系统 xff1b Python3 6 2
  • 我真的要做一辈子的程序员吗?

    本文来自作者 王鹏 在 GitChat 上分享 程序员跳槽时 xff0c 如何正确做好职业规划 xff1f 阅读原文 查看交流实录 编辑 贝吉塔 经常听一些同学说 xff1a 不知道下一份工作该去哪类公司做些什么 xff0c 我的职场人际一
  • 20万到100万年薪的算法工程师有什么区别?

    公元七世纪 xff0c 在车迟国国家气象局组织的一次求雨活动中 xff0c 虎力 鹿力 羊力三位大仙成功地祈下甘霖 xff0c 救黎民于水火中 老国王虽然不明就里 xff0c 却从此尊他们为国师 xff0c 奉道教为圭臬 本世纪 xff0c
  • 在win7下安装ubuntu

    安装VMware 从官网下载VMware workstation full 10 0 4 2249910 exe文件 xff0c 一直点击下一步 xff0c 直到安装成功 安装成功的界面如图所示 xff1a 安装Ubuntu 1 获取发行版
  • 带参数的宏定义 #define

    main c C语言学习 include lt stdio h gt 求和函数 int sum int v1 int v2 return v1 43 v2 宏定义 define 代表要定义一个宏 SUM 宏的名称 v1 v2 参数 xff0
  • 串口编程项目— PX4FLOW 传感器数据接收处理(英文paper直接贴过来)

    写在前面 xff1a 七月份初 xff0c 结束交流生项目 xff0c 向导师申请了个项目 xff0c 关于PX4FLOW传感器的 xff0c serial programming 的java编程 xff0c 下午刚刚提交完paper 写个
  • 电路城(www.cirmall.com)-基于HS1101LF和TC1047A 温湿度传感器模块(硬件+源码+设计说明等)

    电路城 xff08 www cirmall com xff09 本次分享的温湿度传感器模块采用瑞萨电子生产的 R7F0C802 单片机作为控制单元 xff0c 采集温度传感器 TC1047A 输出的电压信号和湿度传感器HS1101LF 电路
  • 服务器后端开发,学什么编程语言?

    服务器后端开发 xff0c 学什么编程语言 xff1f 技术 后台开发 xff0c 目前主流的编程语言是Java xff0c Go语言 xff0c C 43 43 xff0c python 以及php 个人建议学Java xff0c 主流中
  • ROS基础:功能包的创建与编译

    创建 如果你使用的是catkin编译系统 xff0c 那么可以很容易地创建一个功能包 首先进入你的工作空间的src目录下 xff1a cd catkin ws src 然后运行catkin create pkg命令 xff1a catkin
  • 关于TF转换信息(Transforms)的理解

    本文主要内容参考自ROS wiki tf Overview Transformations xff0c 在加入了自己的一些理解的同时 xff0c 我也对原文进行了适当的修改 原文使用Creative Commons Attribution
  • RealSense SDK 开发笔记(一)环境配置

    转载请注明出处 2017 以后的SDK结构必然趋于稳定 xff0c 也就会多一些新特性和新设备的支持 xff0c 配置流程不再变化 2016 2 xff1a 目前SDK版本是2016R1 xff0c 配置过程一模一样 xff0c SDK主要
  • 闭包方法的学习

    相关链接 swift中使用 64 noescape的正确姿势 文档闭包 闭包可以捕获和存储其在上下文中任意常量和变量的引用 被称为包裹常量和变量 Swift会为你管理在捕获过程中涉及到的所有内存操作 在函数章节中介绍的全局和嵌套函数也是特殊
  • CMakeLists常用方法

    我们在编译一个C C 43 43 项目时有时候是需要我们阅读编译脚本来确定编译时的参数 CMakeLists txt是比较常见的编译脚本 xff0c 这里简单介绍几个常用的函数 cmake minimum required 设置cmake的
  • halcon中Image的像素类型

    在学习halcon算子sub image ImageMinuend ImageSubtrahend ImageSub Mult Add 时 xff0c 在样例中遇到了一个操作 This example demonstrates how to

随机推荐

  • GitHub Action构建并推送DockerHub

    前言 偶尔会构建一些自己用的容器 xff0c 之前一直用的是Docker提供的构建服务 xff0c 然而Docker开始收费了 xff0c 那只能另寻他法 之所以不本地构建推送 xff0c 是因为构建的时候经常因为网络问题 xff0c 访问
  • BIO与NIO的方式实现文件拷贝

    面试题 编程实现文件拷贝 xff08 这个题目在笔试的时候经常出现 xff0c 下面的代码给出了两种实现方案 xff09 span class hljs keyword import span java io FileInputStream
  • 一路(16)走来,一起(17)依然同行

    来个自我介绍吧 xff0c 我叫 xff0c 计算机科学与技术专业 xff0c 本科 xff0c 这句话应该是16年整整一年说过最多的 那么我去年整整一年我又有那些收获呢 xff0c so xff0c 我也来个年终总结 xff0c 年初展望
  • 电路城(www.cirmall.com)-学习IoT,BLE编程绝佳平台,nRF52832 BLE(蓝牙低能耗)开发板

    该nRF52832 BLE xff08 蓝牙低能耗 xff09 开发板是一款具有温度 xff0c 湿度 xff0c 环境光和加速度传感器的蓝牙低能耗开发板 该蓝牙开发板具有ARM Cortex M4F CPU的nRF52832 BLE So
  • Linux上jmeter-server启动失败

    贴个广告 楼主的博客已全部搬迁至自己的博客 xff0c 感兴趣的小伙伴请移步haifeiWu与他朋友们的博客专栏 Jmeter server启动失败 xff1a Cannot start Unable to get local host I
  • Mysql的七种join

    对于SQL的Join xff0c 在学习起来可能是比较乱的 我们知道 xff0c SQL的Join语法有很多inner的 xff0c 有outer的 xff0c 有left的 xff0c 有时候 xff0c 对于Select出来的结果集是什
  • shell脚本实现自动保留最近n次备份记录

    贴个广告 楼主的博客已全部搬迁至自己的博客 xff0c 感兴趣的小伙伴请移步haifeiWu与他朋友们的博客专栏 项目中出现的问题 某天上午服务器出现卡顿特别严重 xff0c 页面加载速度奇慢 xff0c 并且某些页面刷新出现404的问题
  • Java实现终止线程池中正在运行的定时任务

    贴个广告 楼主的博客已全部搬迁至自己的博客 xff0c 感兴趣的小伙伴请移步haifeiWu与他朋友们的博客专栏 源于开发 最近项目中遇到了一个新的需求 xff0c 就是实现一个可以动态添加定时任务的功能 说到这里 xff0c 有人可能会说
  • TCP 粘包问题浅析及其解决方案

    最近一直在做中间件相关的东西 xff0c 所以接触到的各种协议比较多 xff0c 总的来说有TCP xff0c UDP xff0c HTTP等各种网络传输协议 xff0c 因此楼主想先从协议最基本的TCP粘包问题搞起 xff0c 把计算机网
  • Redis协议规范(译文)

    原文地址 xff1a haifeiWu的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 Redis客户端使用名为RESP xff08 Redis序列化协
  • Netty 源码中对 Redis 协议的实现

    原文地址 xff1a haifeiWu的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 近期一直在做网络协议相关的工作 xff0c 所以博客也就与之相关
  • 高性能无锁队列 Disruptor 初体验

    原文地址 xff1a haifeiWu和他朋友们的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 最近一直在研究队列的一些问题 xff0c 今天楼主要分
  • Vultr(云服务器)安装GUI图形化界面(已解决)

    服务器 xff1a Vultr OS xff1a Ubuntu 14 04 步骤 xff1a 1 远程登陆到服务器 2 确保所有的包和依赖关系是最新的 apt span class hljs keyword get span update
  • WorkerMan客户端连接失败

    workerman客户端连接失败 今天访问客服聊天功能发现不能发送信息 xff0c 然后看到是因为 WebSocket 连接失败 xff0c 图如下 xff1a 根据字面意思已经了解了问题是因为连接拒绝 xff0c 那么为什么会拒绝呢 xf
  • 2020计算机技术类,部分人工智能与软件工程SCI一区期刊列表(基于letpub数据)

    网上找了很久将计算机技术作为独立大区的期刊列表 xff0c 还是没有找到 所以我决定根据letpub的数据 xff0c 自己整理下 xff0c 方便以后查看 注 xff1a 由于2020与2019年的数据存在一些冲突 xff0c 部分数据可
  • IoT -- 解读物联网四层架构

    本文以物联网四层架构为基础 xff0c 从物联网产品设计的角度来解读每层架构的功能以及主要内容 xff0c 旨在为物联网产品设计以及实现思路感兴趣的物联网产品或研发人员有些帮助 通过互联网 xff0c 人和人之间可以传递和交流信息 物联网
  • 【putty无法连接Linux-centos7】

    一 二 1 vmware中打开虚拟机 xff0c 选择网络适配器 xff0c 选择模式 选择桥接模式 xff0c 则跟电脑主机一样使用以太网 xff0c 可以联网 xff0c 也可以ping通其他主机 xff0c 选择vmnet8 NAT模
  • 我的视觉SLAM学习的小小入门---Ubuntu18配置VINS-MONO

    前言 作为一名才接触视觉SLAM的菜鸟 xff0c 除了捧着高翔老师的书看着那晦涩难懂的代码与理论 xff0c 就是跟着高翔老师的课程囫囵吞枣地学着 但是似乎总不见成效 xff0c 时常想象着何时可以像大佬们一样建图 Vins mono可算
  • 关于Ubuntu(Debian)软件源报错问题及解决

    问题 xff1a 在执行sudo apt get update时出现以下报错 xff0c 查询得知是因为换源以后 xff0c 新的下载源没有公钥 W GPG error http mirrors aliyun com debian bust
  • Cmake常用指令

    1 SET SET lt variable gt lt value gt CACHE lt type gt lt docstring gt FORCE 将缓存条目variable设置为值 lt value gt xff0c 除非用户进行设置