cmake學習之- set

  • 最後更新: 2019-06-06

1、簡單介紹

setunset 爲一對相反的指令,分別爲設置變量以及取消設置變量。html

  1. 什麼是變量?shell

    • 變量就是用於保存值的存儲單元。
  2. 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>])
  3. 變量的做用域ui

    • Function Scope: 在函數內部定義,僅僅在當前函數以及所調用的子函數內有效;
    • Directory Scope: 在當前目錄的定義的變量,當調用子目錄時候,子目錄會複製一份父級目錄內的變量到子目錄中
    • Persistent Cache: 持久化的緩存,通常由CACHE 存儲起來.
  4. 變量的搜索路徑spa

    1. 在當前 Function Scope 調用內查找,找到後使用,未找到進行下一步;
    2. 在當前目錄下面查找,找到使用,未找到下一步;
    3. 在 CACHE 中尋找,找到使用,未找到,則爲空.

2、設置通常變量(Normal Variable)

set(<variable> <value>... [PARENT_SCOPE])
  • 將一個或者多個值 <value>... 賦值給變量 <variable>, 多個值之間以分號(;)分隔。

2.1 參數解析

  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 參數解析

  1. 類型 type

    類型 type 必須爲如下的一種

    • BOOL
      • 布爾值(ON/OFF)
    • FILEPATH
      • 文件路徑
    • PATH
      • 目錄路徑
    • STRING
      • 字符串
    • INTERNAL
      • 單行文字
  2. 描述字符串 <docstring>: 單行文字,用於 CMAKE-GUI 的時提示用戶

  3. 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

相關文章
相關標籤/搜索