- 最後更新: 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