cmake 变量和全局变量缓存
示例
通常,您将使用“普通变量”:
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" 缓存字符串 "A test") message("VAR = ${VAR}") set(VAR "NORMAL") message("VAR = ${VAR}") set(VAR "CACHED" 缓存字符串 "A test" FORCE) message("VAR = ${VAR}")
首次运行的输出
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"缓存路径"PathtolibA")
命令行
$cmake-DLIB_A_PATH:PATH="/some/other/path"..
这确实在缓存中预设了该值,并且上面的行不会修改它。
CMakeGUI
在GUI中,用户首先启动配置过程,然后可以修改任何缓存的值,并以开始生成构建环境结束。
另外,CMake确实会缓存搜索/测试/编译器标识结果(因此,只要重新运行配置/生成步骤,就无需再次执行此操作)
find_path(LIB_A_PATHlibA.aPATHS"/some/default/path")
在此处LIB_A_PATH创建为缓存变量。