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-initVAR = NORMAL
VAR = CACHED
第二次运行的输出
VAR = CACHEDVAR = NORMAL
VAR = CACHED
注意:该FORCE选项还会从当前作用域中取消设置/删除普通变量。
缓存变量的用例
通常有两个用例(请不要将它们误用于全局变量):
您代码中的值应该可以通过您的项目用户进行修改,例如cmakegui,使用ccmake或cmake -D ...选项:
CMakeLists.txt / MyToolchain.cmake
set(LIB_A_PATH "/some/default/path" 缓存路径 "Path to lib A")
命令行
$cmake -D LIB_A_PATH:PATH="/some/other/path" ..
这确实在缓存中预设了该值,并且上面的行不会修改它。
CMake GUI
在GUI中,用户首先启动配置过程,然后可以修改任何缓存的值,并以开始生成构建环境结束。
另外,CMake确实会缓存搜索/测试/编译器标识结果(因此,只要重新运行配置/生成步骤,就无需再次执行此操作)
find_path(LIB_A_PATHlibA.aPATHS "/some/default/path")
在此处LIB_A_PATH创建为缓存变量。
以上是 cmake 变量和全局变量缓存 的全部内容, 来源链接: utcz.com/z/315836.html