cmake更新缓存的变量
cmake update cached variable
我使用cmake变量CMAKE_BUILD_CONFIG
来指定要编译repo的哪些模块,就像命令行中的。。。
cmake -DCMAKE_BUILD_CONFIG=A ..
这个CMAKE_BUILD_CONFIG
然后在CMakeLists.txt
文件中使用,就像这样…
if(CMAKE_BUILD_CONFIG STREQUAL A)
message(STATUS "Compiling only config A modules")
set(MODULES
foo1
foo2
)
elseif(CMAKE_BUILD_CONFIG STREQUAL B)
message(STATUS "Compiling only config B modules")
set(MODULES
foo3
)
endif()
所以现在,当我第一次运行cmake -DCMAKE_BUILD_CONFIG=A ..
(或B(时,它工作得很好。然而,在那之后,它似乎在CMakeCache.txt
中保存了CMAKE_BUILD_CONFIG
,如果我调用cmake -DCMAKE_BUILD_CONFIG=B ..
,它就不会更新。
在寻找解决方案时,我找到了unset(CMAKE_BUILD_CONFIG CACHE)
调用,并将其添加到CMakeLists.txt
的末尾,但这并没有起到作用。
谢谢
然而,在那之后,它似乎保存了CMAKE_BUILD_CONFIGCMakeCache.txt,如果我调用cmake则不会更新-DCMAKE_BUILD_CONFIG=B。。。
这应该可以正常工作(使用CMake 2.8.12及更高版本进行测试(。
引用CMake文档(重点挖掘(:
-D <var>:<type>=<value>
、-D <var>=<value>
创建或更新cmake缓存条目。
您可以通过一个小的测试脚本轻松验证这一点:
cmake_minimum_required(VERSION 3.0)
project(cmake_tester CXX)
message("Module Config is " ${CMAKE_BUILD_CONFIG})
然后使用-D
的不同参数运行cmake会更改缓存值:
$ cmake -DCMAKE_BUILD_CONFIG=Foo ..
Module Config is Foo
-- Configuring done
$ cmake ..
Module Config is Foo
-- Configuring done
$ cmake -DCMAKE_BUILD_CONFIG=Bar ..
Module Config is Bar
-- Configuring done
如果这对您不起作用,则意味着您的构建脚本正在做一些您没有告诉我们的事情,这会主动阻止它发挥作用。
这不是最好的解决方案,但没有更好的解决方案:
您可以删除CMakeCache.txt以防止出现此问题。我建议将CMakeCache.txt从当前文件夹中移动,运行"cmake"answers"make",并检查它是否有效。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- cmake更新缓存的变量
- 是否可以检查变量是否位于 L1/L2/L3 缓存中
- dynamic_cast每次调用是否比具有空检查的缓存变量更昂贵?
- 混合原子和非原子变量和缓存
- 缓存行大小的倍数的变量的缓存行填充
- TLS变量访问的结果未缓存
- 做静态变量会阻碍数据缓存
- Can编译器有时会缓存声明为volatile的变量
- 映射查找函数调用 Vs 将查找缓存为静态变量
- 与linux信号/条件变量相比,缓存一致性开销
- 在C++中,我应该费心缓存变量,还是让编译器进行优化?(别名)
- 什么是寄存器缓存,它与const变量有什么关系
- 如何阻止VS2K10缓存环境变量