CMakeLists.txt语法规则:提供信息的变量说明一

server/2024/9/23 9:31:23/

一.  简介

前面几篇文章学习了 CMakeLists.txt语法中 部分常用命令。

接下来学习CMakeLists.txt语法中部分常用变量,变量也是 cmake 中的一个重头戏,cmake 提供了很多内置变量。每一个变量都有它自己的含义,可以通过如下链接地址查询到所有的内置变量及其相应的介绍:

https://cmake.org/cmake/help/v3.16/manual/cmake-variables.7.html
在这一份文档中,对变量进行分类。变量分为:提供信息的变量、改变行为的变量、描述系统的变量、控制编译的变量等等。

二.   CMakeLists.txt语法规则:部分常用变量

1.  提供信息的变量

顾名思义,这种变量可以提供某种信息,既然如此,那么我们通常只需要读取变量即可,而不需要对变量进行修改:
变量
说明
PROJECT_SOURCE_DIR
工程顶层目录,也就是顶层 CMakeLists.txt 源码所在目录
PROJECT_BINARY_DIR
工 程 BINARY_DIR , 也 就 是 顶 层 CMakeLists.txt 源码的 BINARY_DIR
CMAKE_SOURCE_DIR
PROJECT_SOURCE_DIR 等价
CMAKE_BINARY_DIR
PROJECT_BINARY_DIR 等价
CMAKE_CURRENT_SOURCE_DIR
当前源码所在路径
CMAKE_CURRENT_BINARY_DIR
当前源码的 BINARY_DIR
CMAKE_MAJOR_VERSION
cmake 的主版本号
CMAKE_MINOR_VERSION
cmake 的次版本号
CMAKE_VERSION
cmake 的版本号(主++修订)
PROJECT_VERSION_MAJOR
工程的主版本号
PROJECT_VERSION_MINOR
工程的次版本号
PROJECT_VERSION
工程的版本号
CMAKE_PROJECT_NAME
工程的名字
PROJECT_NAME
工程名,与 CMAKE_PROJECT_NAME 等价

2.  PROJECT_SOURCE_DIR变量 和 PROJECT_BINARY_DIR 变量

PROJECT_SOURCE_DIR 变量表示工程的顶级目录,也就是顶层 CMakeLists.txt 文件所在目录;
PROJECT_BINARY_DIR 变 量 表示 工程 的 BINARY_DIR ,也 就是 顶 层 CMakeLists.txt 源 码 对 应的 BINARY_DIR (输出文件目录)。
譬如工程目录结构如下所示:
CMakeLists.txt 文件内容如下:
# CMakeLists.txt
cmake_minimum_required("VERSION" "3.16")
project(HELLO)
message(${PROJECT_SOURCE_DIR})
message(${PROJECT_BINARY_DIR})
CMakeLists.txt 中,我们打印了 PROJECT_SOURCE_DIR PROJECT_BINARY_DIR 变量,进入到 build 目录下,执行 cmake
从打印信息可知, PROJECT_SOURCE_DIR 指的就是工程的顶层 CMakeLists.txt 源码所在路径,而 PROJECT_BINARY_DIR 指的是我们执行 cmake 命令的所在目录。

3.  CMAKE_SOURCE_DIR 和 CMAKE_BINARY_DIR

与上面两个等价,大家自己打印出来看看便知!
顶层 CMakeLists.txt 添加打印命令:
message(${CMAKE_SOURCE_DIR})
message(${CMAKE_BINARY_DIR})

进入 build目录下,执行 cmake ..命令后如下:
可以看出,与 PROJECT_SOURCE_DIR,PROJECT_BINARY_DIR一样的目录。


http://www.ppmy.cn/server/34177.html

相关文章

工作问题记录React(持续更新中)

一、backdrop-filter:blur(20px); 毛玻璃效果,在安卓机上有兼容问题,添加兼容前缀也无效; 解决方案:让设计师调整渐变,不要使用该属性! 复制代码 background: radial-gradient(33% 33% at 100% 5%, #e9e5e5 0%, rgba…

[Spring Cloud] (6)gateway整体加解密

文章目录 简述整体效果后端增加配置nacos增加配置GlobalConfig 添加请求整体解密拦截器DecryptionFilter添加响应整体解密拦截器EncryptionFilter 前端请求拦截器添加整体加密逻辑请求头中添加sessionId 响应拦截器添加整体解密逻辑 简述 本文网关gateway,微服务&a…

编译链接过程

编译链接过程 预编译阶段 删除所有的“#define”,并且展开所有的宏定义; 处理所有的条件预编译指令,“#if”、“#ifdef”、“#endif”等; 处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置; 删除所有的注释; 添加行号和文…

如何面对并发下的bug

整理总结自蒋炎岩老师的b站课程,https://jyywiki.cn/OS/2022/index.html 并发bug与应对 应对bug的方法 在代码里边增加很多检查(加断言) #include "thread.h"unsigned long balance 100;void Alipay_withdraw(int amt) {if (balance > amt) {usleep(…

上位机图像处理和嵌入式模块部署(树莓派4b和mcu的分工与配合)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 树莓派4b从广义上来说,它本身就是一个mini小电脑。我们需要什么软件,就可以apt install去下载即可。这和之前嵌入式linux开…

AI新突破:多标签预测技术助力语言模型提速3倍

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:多标签预测的新视角 在人工智能领域,尤其是在自然语言处理(NLP)中,预测模型的训练方法一直在…

[微信小程序] 入门笔记1-滚动视图组件

[微信小程序] 入门笔记1-滚动视图组件 1.页面&组件&渲染 在小程序是由一个个页面page组成, 而页面又是由一个个组件component组成.和网页类似,这里的组件指的就是输入框<input>,按钮<button>,文本<text>,图片<image>等元素.如果你学过网页一…

RK3568 学习笔记 : 精简 u-boot env 默认复杂的多种引导启动设置

前言 环境&#xff1a; 正点原子 Atompi-CA1 RK3568 开发板、正点原子 DLRK3568 开发板&#xff0c;&#xff08;一时脑热买了两块 RK3568 开发板&#xff09;&#xff0c;Atompi-CA1 RK3568 开发板比较小巧&#xff0c;利于一些前期的嵌入式 Linux 开发学习与实践。 RK3568 开…