[CMake教程] 使用变量

CMake 同样可以使用变量,比如当依赖文件过多或需要生成的项目繁杂,就可以使用变量统一管理,也便于以后的条件编译。

CMake 变量分为环境变量普通变量

环境变量:CMake 进程中具有全局范围,其初始值为进程调用时的值,后面可以通过set()unset()修改,但修改的值仅在当前进程有效,不影响整个系统环境。

普通变量: 通过set()unset()创建和销毁,具有动态作用域。

4.1 定义变量(赋值)

CMake 定义变量分显式和隐式两种。
显式定义: 即使用 set() 等语句,可以自定义变量。
隐式定义: 是在使用其他语句时自动创建的变量,如 project 是定义项目名称的,但在定义的同时,<projectname>_BINARY_DIR<projectname>_SOURCE_DIR 两个变量就被隐式定义了。
例如:
只执行下面语句:

project(test_4)

test_4_BINARY_DIRtest_4_SOURCE_DIR 两个变量就被隐式定义了。

set语句语法

set(<variable> [<value>...]// 普通变量
set(ENV{<variable>} [<value>]) // 环境变量
  • 如给定变量值value,则将该值赋给该变量,如:set(TEST test)
  • 如不给定变量值value,则会销毁该变量,同unset,如:set(TEST)

如:

set(USER_KEY "Hello World")
# USER_KEY = "Hello World"

对于普通变量,可以为一个变量赋多值,会返回一个以;分隔的列表:

set(USER_KEY 
	"Hello World"
	"Hello CMake"
)
# USER_KEY = "Hello World;Hello CMake"

4.2 引用变量(取值)

使用 ${variable} 进行变量引用。在 if 等语句中,直接使用变量名而不通过 ${variable} 取值。

对于环境变量,需要使用$ENV{variable}

例如 CMake学习(一)中CMakeLists.txt内容:

# CMakeLists.txt
# CMake最低版本要求
cmake_minimum_required(VERSION 3.5)

# 项目名称
project(test_1)

# 生成可执行文件,test_1是可执行文件的名字,hello.c是源文件名称,如有其他源文件,可在后面添加
add_executable(test_1 hello.c) 

可以修改为:

# CMakeLists.txt
# CMake最低版本要求
cmake_minimum_required(VERSION 3.5)

# 项目名称
project(test_1)

set(SOURCE hello.c)

# 生成可执行文件,test_1是可执行文件的名字,hello.c是源文件名称,如有其他源文件,可在后面添加
add_executable(test_1 ${SOURCE}) 

4.3 一些常用的CMAKE变量

  • PROJECT_NAME

    当前项目 project() 指定的项目名称

  • CMAKE_PROJECT_NAME

    顶级项目的名称。

    该变量保存顶级 CMakeLists.txt 文件中指定的项目名称 project() 命令。如果顶层 CMakeLists.txt 包含多个 project() 调用时,将使用顶层 CMakeLists.txt 中最近调用的一个确定 CMAKE_PROJECT_NAME 包含的名称。例如,考虑以下顶级 CMakeLists.txt:

    cmake_minimum_required(VERSION 3.0)
    project(First)
    project(Second)
    add_subdirectory(sub)
    project(Third)
    

    sub/CMakeLists.txt具有以下内容:

    project(SubProj)
    message("CMAKE_PROJECT_NAME = ${CMAKE_PROJECT_NAME}")
    

    最近看到的 project() 来自顶层 CMakeLists.txt 的命令将为project(Second),因此将打印:

    CMAKE_PROJECT_NAME = Second
    
  • CMAKE_BINARY_DIR

    顶层构建树生成二进制文件的目录

  • PROJECT_BINARY_DIR / _BINARY_DIR / CMAKE_CURRENT_BINARY_DIR

    当前项目生成二进制文件的目录

  • CMAKE_SOURCE_DIR

    顶层构建树的目录,即工程顶层 CMakeLists.txt 目录

  • PROJECT_SOURCE_DIR / _SOURCE_DIR / CMAKE_CURRENT_SOURCE_DIR

    当前项目所在的目录,即当前项目的 CMakeLists.txt 目录

  • CMAKE_VERSION

    CMake版本号。它包含 <major>.<minor>.<patch> 三部分,可以通过以下三个变量分别获取:
    CMAKE_MAJOR_VERSIONCMAKE_MINOR_VERSIONCMAKE_PATCH_VERSION

    并且可以使用以下操作符对版本号进行条件判断:VERSION_LESSVERSION_GREATERVERSION_EQUALVERSION_LESS_EQUALVERSION_GREATER_EQUAL,这里注意版本号不能与浮点数比较。

  • 更多 CMake 变量见 CMake变量

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CMake一个跨平台的工具,用于自动生成编译配置文件。CMake教程PDF提供全面的介绍和指导,以帮助您学习如何使用CMake来构建跨平台的C++项目。该教程涵盖了CMake的大部分关键方面,包括语法,变量,函数和指令。 CMake教程PDF是一个很好的起点,因为它提供了一个完整的指南,以帮助您了解如何为您的C++项目使用CMake。该教程还涵盖了不同操作系统的支持以及如何使用CMake来构建库和安装目标。 此外,该教程还提供了许多示例和练习来帮助您进一步了解CMake的各个方面。这些示例和练习包括从最简单的项目开始,逐步发展到复杂的实际例子,以帮助您学习如何使用CMake。 总而言之,CMake教程PDF是您学习和使用CMake的最佳资源之一。它提供了全面的指南和示例,以帮助您轻松地创建和管理C++项目。如果您正在寻找一个跨平台的构建工具,CMake一个强大且易于使用的选择。 ### 回答2: CMake是一种跨平台的编译工具,可以自动生成各种不同编译工具所需的构建文件,从而方便地进行代码构建和编译。CMake教程PDF可以帮助开发者学习CMake使用方法,并使用其进行代码构建。 本教程的内容主要包括: 1. CMake的安装和配置 2. CMake的基础语法和命令 3. CMake的高级用法,如常用变量、构建选项、条件编译等 4. CMake和其他工具的集成,如Qt、CTest、CPack等 通过学习本教程,开发者可以快速掌握CMake使用方法,提高代码构建效率和可维护性,同时也能了解到CMake与其他工具的集成方式。 总的来说,CMake教程PDF对于学习和使用CMake来构建代码的开发者来说非常实用和有价,是学习CMake的必要参考资料。 ### 回答3: CMake是一种跨平台自动化构建工具,使开发人员可以轻松地生成跨平台可执行文件、库和测试。CMake教程PDF 是一份详细的指南,可以帮助任何开发人员从头开始学习如何使用CMake构建自己的项目。 该教程从基础开始,将CMake的核心概念和语法解释清楚,同时还提供了完整的示例和演示工程,可以帮助读者深入理解CMake的内部机制,掌握高级用法和技巧。此外,还介绍了在不同操作系统和编译器上使用CMake的最佳实践和常见问题的解决方案。 该教程的用语简单明了,非常适合初学者和有C++编程经验的人读。它涵盖了CMake的许多方面,包括构建系统的设计、源代码管理、测试、安装、交叉编译等。它还介绍了CMake如何与其他构建工具和库集成,例如Boost、Qt、Eigen等。 总之,CMake教程PDF 是一本非常实用的指南,能够帮助开发人员了解和使用CMake来有效地构建他们的项目,并解决可能遇到的问题。如果您想更深入地了解 CMake使用,那么这本教程一定是必备的读物。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万俟淋曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值