cmake學習之- set


  • 最后更新: 2019-06-06

一、簡單介紹

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

  1. 什么是變量?

    • 變量就是用於保存值的存儲單元。
  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. 變量的作用域

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

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

二、設置一般變量(Normal Variable)

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

2.1 參數解析

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

  1. 類型 type

    類型 type 必須為以下的一種

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM