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

devtools/2024/10/18 6:00:21/

一.  简介

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

相关文章

Github 2024-05-06 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Jupyter Notebook项目2Python项目2C#项目1JavaScript项目1Cuda项目1TypeScript项目1Rust项目1C项目1简单、纯净的C/CUDA中的LLM培训 创建周期:…

GO语言核心30讲 实战与应用 (第一部分)

原站地址:Go语言核心36讲_Golang_Go语言-极客时间 一、测试的基本规则和流程 1. GO程序主要分三类测试:功能测试、性能测试,以及示例测试。 示例测试和功能测试差不多,但它更关注程序打印出来的内容。 2. 测试文件的名称应该以…

Phi-2:小型语言模型令人惊人的能力

导语 phi-系列模型是微软研究团队推出的轻量级人工智能模型,旨在实现“小而精”的目标,能够实现在低功耗设备上例如智能手机和平板电脑上部署运行。截止目前,已经发布到了phi-3模型,本系列博客将沿着最初的phi-1到phi-1.5&#x…

基于LLama3、Langchain,Chroma 构建RAG

概要: 使用Llama3 Langchain和ChromaDB创建一个检索增强生成(RAG)系统。这将允许我们询问有关我们的文档(未包含在训练数据中)的问题,而无需对大型语言模型(LLM)进行微调。在使用RA…

Unity DOTS1.0(8) Aspect核心机制分析

Aspect 概念: ASPECT是一种用于描述Entity的特性或特征的概念。ASPECT通常用于在系统中筛选出具有特定组件集合的实体。 你可以把5~6个组件得引用保存到一个数据对象里面(Aspect),你通过Aspect就可以拿到这些组件得引用,从而访问这些组件数据; Unity 会…

读天才与算法:人脑与AI的数学思维笔记19_深度数学

1. 深度数学 1.1. 组合与选择,是发明新事物的两个不可或缺的条件 1.1.1. 保尔瓦雷里(Paul Valry) 1.2. 利用以往的数学定理证明过程训练算法,以发现新的定理 1.3. 谷歌设在伦敦的总部整体有一种现代牛津大学的感觉&#xff0c…

Cocos Creator UICanvas详解与2D游戏配置详解

前言 Cocos Creator是一款强大的2D游戏开发引擎,提供了丰富的工具和组件来帮助开发者快速制作出优秀的游戏作品。其中,UICanvas是Cocos Creator中一个非常重要的组件,用于管理游戏中的UI界面。 在本文中,我们将深入探讨Cocos Cr…

虚幻引擎5 Gameplay框架(二)

Gameplay重要类及重要功能使用方法(一) 配置LOG类及PlayerController的网络机制 探索验证GamePlay重要函数、类的执行顺序与含义 我们定义自己的日志,专门建立一个存放自己日志的类,这个类继承自BlueprintFunctionLibrary 然后…