《CMake构建实战》CMake 变量
# CMake 变量继续学习《CMake构建实战》第3章 变量
同大多数编程语言一样,CMake中的变量也是存储数据的基本单元,但CMake变量都是文本型的,在使用时会被一些命令解释成数值、列表等。
## 变量分类
普通变量:大多数变量都是普通变量,它们具有特定的作用域
缓存变量:能够被缓存起来的变量,会被持久化到缓存文件`CMakeCache.txt`。例如第一次配置时会检测编译器路径,然后将其作为缓存变量持久化,避免每次执行都重新进行检测。
环境变量:操作系统中的环境变量,对CMake进程具有全局的作用域。
### 预定义变量
CMake中有许多预定义的普通变量和环境变量,他们一般以“CMAKE_”开头,例如:
`CMAKE_CURRENT_LIST_DIR` 表示当前运行中的CMake程序所在目录的绝对路径
`CMAKE_SYSTEM_NAME` 表示CMake构建的目标操作系统名称。
创建 1.cmake
```cmake
message("OS: ${CMAKE_HOST_SYSTEM_NAME}")
```
执行
```bash
$ cmake -P 1.cmake
OS: Linux
```
## 条件语法
CMake中几乎一切都是命令,条件语法名义上是“语法”,但其充其量是命令中的某种特定的参数形式。
### 常量、变量
真值常量:ON,YES,TRUE,Y,或非零数值
假值常量:0,OFF,NO,FALSE,N,IGNORE,空字符串,NOTFOUND
创建2.cmake
```cmake
cmake_minimum_required(VERSION 3.20)
if(ABC)
else()
message("ABC不是一个已定义的变量")
endif()
set(a "XYZ")
set(b "0")
set(c "a-NOTFOUND")
if(a)
message("a是一个变量,其值非假值常量,因此为真")
endif()
if(b)
else()
message("b是一个变量,其值假值常量,因此为假")
endif()
if(c)
else()
message("c是一个变量,其值假值常量,因此为假")
endif()
```
运行结果
```bash
$ cmake -P 2.cmake
ABC不是一个已定义的变量
a是一个变量,其值非假值常量,因此为真
b是一个变量,其值假值常量,因此为假
c是一个变量,其值假值常量,因此为假
```
### 逻辑运算
条件语法中可以包含与(AND)、或(OR)、非(NOT)三种逻辑运算。
创建`3.cmake`
```cmake
cmake_minimum_required(VERSION 3.20)
if(NOT OFF)
message("NOT OFF为真")
endif()
if(ON AND YES)
message("ON AND YES为真")
endif()
```
执行结果
```bash
$ cmake -P 3.cmake
NOT OFF为真
ON AND YES为真
```
<p>CMake 变量和其他编程语言没有什么特色啊</p>
Jacktang 发表于 2024-10-13 08:37
CMake 变量和其他编程语言没有什么特色啊
<p>个人感觉CMake变量比较随意,和其他编程语言还是有较大区别,需要熟悉之后才能应用</p>
<p>cmake就是一个语言,又支持不完全,挺麻烦的。有时候找问题只能猜</p>
页:
[1]