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

news/2024/9/25 15:25:07/

一.  简介

前面几篇文章学习了 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/news/1453955.html

相关文章

自注意力架构大成者_Transformer(Pytorch 17)

1 模型简介 在上节比较了 卷积神经网络(CNN)、循环神经网络(RNN)和 自注意力(self‐attention)。值得注意的是, 自注意力同时具有并行计算和最短的最大路径长度这两个优势。因此,使…

C语言中的goto语句

goto label; C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 #include <stdio.h> int main(){goto first;printf("我是你好\n");first:printf("nihao\n");second:printf("This is 2\n");return 0; } 使用goto会…

玩comfyui踩过的坑之使用ComfyUI_Custom_NODES_ALEKPET翻译组件问题

环境&#xff1a; 秋叶安装包&#xff0c;安装ComfyUI_Custom_NODES_ALEKPET组件或者直接下载网盘中的包&#xff0c;直接解压包到comfyui根目录/custom_nodes/&#xff0c;重启后&#xff0c;按指导文件操作。 注意&#xff1a;网盘指导包中有配置好的流程json文件&#xff0…

1-36 双列集合

一 Map集合 1.存储特点(重点记忆:) 以键值对(KEY-VALUE)形式存储 2.特点: ①将键值对看做对象进行存储 ②KEY 不能重复,VALUE可以重复 ③每一对K-V都是意义对应的映射关系 3.拓展:Map集合是双列集合,由两个单列集合组成的 分析KEY和VALUE所在的是什么种类集合 ①KEY不…

【Linux】对信号产生的内核级理解

一、键盘产生信号 键盘产生信号这里就要涉及一个重要的概念了&#xff0c;叫硬件中断。我这里会粗粒度地说一下键盘产生信号&#xff0c;以及信号被上层软件读到的过程&#xff0c;只是说一下我自己的理解。 1.1、硬件中断 硬件中断是计算机中的一种机制&#xff0c;它允许硬件…

谈谈Tcpserver开启多线程并发处理遇到的问题!

最近在学习最基础的socket网络编程&#xff0c;在Tcpserver开启多线程并发处理时遇到了一些问题&#xff01; 说明 在linux以及Windows的共享文件夹进行编写的&#xff0c;所以代码中有的部分使用 #ifdef WIN64 ... #else ... #endif 进入正题&#xff01;&#xff01;&…

问题 A: 实验11_4_初识链表

题目描述 已知一个正整数序列&#xff0c;个数未知&#xff0c;但至少有一个元素&#xff0c;你的任务是建立一个单链表&#xff0c;并使用该链表存储这个正整数序列&#xff0c;然后统计这个序列中元素的最大值与最小值&#xff0c;计算序列全部元素之和。正整数的输入用-1作…

ES数据存储与查询基本原理

Elasticsearch&#xff08;ES&#xff09;简介 Elasticsearch&#xff08;ES&#xff09;是一个分布式、可扩展、近实时的搜索和分析引擎&#xff0c;它基于Lucene&#xff0c;设计用于云计算中&#xff0c;处理大规模文档检索和数据分析任务&#xff0c;常用于实现内部搜索引…