小麦克 发表于 2024-10-13 07:01

《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为真
```

Jacktang 发表于 2024-10-13 08:37

<p>CMake 变量和其他编程语言没有什么特色啊</p>

小麦克 发表于 2024-10-13 19:15

Jacktang 发表于 2024-10-13 08:37
CMake 变量和其他编程语言没有什么特色啊

<p>个人感觉CMake变量比较随意,和其他编程语言还是有较大区别,需要熟悉之后才能应用</p>

freebsder 发表于 2024-10-17 18:33

<p>cmake就是一个语言,又支持不完全,挺麻烦的。有时候找问题只能猜</p>
页: [1]
查看完整版本: 《CMake构建实战》CMake 变量