變數和全域性變數快取
大多數情況下,你將使用 正常變數 :
set(VAR TRUE)
set(VAR "main.cpp")
set(VAR1 ${VAR2})
但是 CMake 也知道全域性 快取變數 (持續存在於 CMakeCache.txt
中)。如果當前作用域中存在同名的普通和快取記憶體變數,則普通變數會隱藏快取記憶體的變數:
cmake_minimum_required(VERSION 2.4)
project(VariablesTest)
set(VAR "CACHED-init" CACHE STRING "A test")
message("VAR = ${VAR}")
set(VAR "NORMAL")
message("VAR = ${VAR}")
set(VAR "CACHED" CACHE STRING "A test" FORCE)
message("VAR = ${VAR}")
First Run 的輸出
VAR = CACHED-init
VAR = NORMAL
VAR = CACHED
第二輪的輸出
VAR = CACHED
VAR = NORMAL
VAR = CACHED
注意: FORCE
選項還會取消/從當前範圍中刪除正常變數。
快取變數的用例
通常有兩個用例(請不要將它們用於全域性變數):
-
程式碼中的值應該可以從專案的使用者修改,例如使用
cmakegui
,ccmake
或cmake -D ...
選項:CMakeLists.txt / MyToolchain.cmake
set(LIB_A_PATH "/some/default/path" CACHE PATH "Path to lib A")
命令列
$ cmake -D LIB_A_PATH:PATH="/some/other/path" ..
這會在快取中預先設定此值,上面的行不會對其進行修改。
CMake GUI
在 GUI 中,使用者首先啟動配置過程,然後可以修改任何快取的值,並在啟動構建環境生成時完成。
-
此外,CMake 會快取搜尋/測試/編譯器識別結果(因此無需在重新執行配置/生成步驟時再次執行此操作)
find_path(LIB_A_PATH libA.a PATHS "/some/default/path")
這裡
LIB_A_PATH
被建立為快取變數。