- 最后更新: 2019-06-06
1、简单介绍
set
和 unset
为一对相反的指令,分别为设置变量以及取消设置变量。html
-
什么是变量?shell
- 变量就是用于保存值的存储单元。
-
set
有哪几种?缓存-
set
有三种,分别为: 设置通常变量(Set Normal Variable), 设置缓存变量(Set Cache Entry),设置环境变量(Set Environment Variable)函数// 1. 设置通常变量(Set Normal Variable) set(<variable> <value>... [PARENT_SCOPE]) // 2. 设置缓存变量(Set Cache Entry) set(<variable> <value>... CACHE <type> <docstring> [FORCE]) // 3. 设置环境变量(Set Environment Variable) set(ENV{<variable>} [<value>])
-
-
变量的做用域ui
- Function Scope: 在函数内部定义,仅仅在当前函数以及所调用的子函数内有效;
- Directory Scope: 在当前目录的定义的变量,当调用子目录时候,子目录会复制一份父级目录内的变量到子目录中
- Persistent Cache: 持久化的缓存,通常由
CACHE
存储起来.
-
变量的搜索路径spa
- 在当前 Function Scope 调用内查找,找到后使用,未找到进行下一步;
- 在当前目录下面查找,找到使用,未找到下一步;
- 在 CACHE 中寻找,找到使用,未找到,则为空.
2、设置通常变量(Normal Variable)
set(<variable> <value>... [PARENT_SCOPE])
- 将一个或者多个值
<value>...
赋值给变量<variable>
, 多个值之间以分号(;)分隔。
2.1 参数解析
- PARENT_SCOPE
- 配置该选项后,表示该变量在父级做用域上有效, 在当前做用域上是无效的;
2.2 Coding
目录结构以下:code
rs:cmake-set$ tree . ├── CMakeLists.txt ├── main.cpp └── subdir └── CMakeLists.txt
顶层的 CMakeLists.txtorm
cmake_minimum_required(VERSION 3.5) project(DEMO VERSION 10.2.1.3 LANGUAGES CXX C ASM ) # 设置通常变量 set(PNAME rsenjoyer) set(PGRADE 80 85 90 95) message("top name = ${PNAME}") # top name = rsenjoyer message("top grade = ${PGRADE}") #top grade = 80;85;90;95 add_subdirectory(subdir) message("top after name = ${PNAME}") # top name = rsenjoyer add_executable(DEMO main.cpp)
子目录的 CMakeLists.txthtm
set(PNAME jack) message("sub name = ${PNAME}") # sub name = jack # 仅仅会改变父级的 PNAME, 对当前的变量不会更改 set(PNAME rose PARENT_SCOPE) message("sub name = ${PNAME}") #sub name = jack
3、设置缓存变量(Set Cache Entry)
set(<variable> <value>... CACHE <type> <docstring> [FORCE])
做用作用域
- 设置变量并缓存到 CMakeCache.txt
- 默认不会覆盖已缓存(已存在于 CMakeCache.txt )的变量;
3.1 参数解析
-
类型 type
类型 type 必须为如下的一种
- BOOL
- 布尔值(ON/OFF)
- FILEPATH
- 文件路径
- PATH
- 目录路径
- STRING
- 字符串
- INTERNAL
- 单行文字
- BOOL
-
描述字符串
<docstring>
: 单行文字,用于 CMAKE-GUI 的时提示用户 -
FORCE 用因而否强制更新缓存里面的值,配置后,每次都会强制更新
CMakeCache.txt
里面的值
4、设置环境变量(Set Environment Variable)
set(ENV{<variable>} [<value>])
做用
- 设置环境变量
<variable>
,值为<value>
- 若是
<value>
不存在或者为空字符串 表示清除该环境变量
5、环境变量与通常变量区别
参考: https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#cmake-language-variables