- 最后更新: 2019-06-06
一、簡單介紹
set
和 unset
為一對相反的指令,分別為設置變量以及取消設置變量。
-
什么是變量?
- 變量就是用於保存值的存儲單元。
-
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>])
-
-
變量的作用域
- Function Scope: 在函數內部定義,僅僅在當前函數以及所調用的子函數內有效;
- Directory Scope: 在當前目錄的定義的變量,當調用子目錄時候,子目錄會復制一份父級目錄內的變量到子目錄中
- Persistent Cache: 持久化的緩存,一般由
CACHE
存儲起來.
-
變量的搜索路徑
- 在當前 Function Scope 調用內查找,找到后使用,未找到進行下一步;
- 在當前目錄下面查找,找到使用,未找到下一步;
- 在 CACHE 中尋找,找到使用,未找到,則為空.
二、設置一般變量(Normal Variable)
set(<variable> <value>... [PARENT_SCOPE])
- 將一個或者多個值
<value>...
賦值給變量<variable>
, 多個值之間以分號(;)分隔。
2.1 參數解析
- PARENT_SCOPE
- 配置該選項后,表示該變量在父級作用域上有效, 在當前作用域上是無效的;
2.2 Coding
目錄結構如下:
rs:cmake-set$ tree
.
├── CMakeLists.txt
├── main.cpp
└── subdir
└── CMakeLists.txt
頂層的 CMakeLists.txt
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.txt
set(PNAME jack)
message("sub name = ${PNAME}") # sub name = jack
# 僅僅會改變父級的 PNAME, 對當前的變量不會更改
set(PNAME rose PARENT_SCOPE)
message("sub name = ${PNAME}") #sub name = jack
三、設置緩存變量(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
里面的值
四、設置環境變量(Set Environment Variable)
set(ENV{<variable>} [<value>])
作用
- 設置環境變量
<variable>
,值為<value>
- 如果
<value>
不存在或者為空字符串 表示清除該環境變量
五、環境變量與一般變量區別
參考: https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#cmake-language-variables