变量和全局变量缓存
大多数情况下,你将使用 正常变量 :
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
被创建为缓存变量。