cmake更新缓存的变量

cmake update cached variable

本文关键字:变量 缓存 更新 cmake      更新时间:2023-10-16

我使用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",并检查它是否有效。