我使用cmake变量CMAKE_BUILD_CONFIG
指定要编译的仓库中的哪些模块,就像在命令行上一样。
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),效果很好。但是在那之后,似乎CMAKE_BUILD_CONFIG
已保存在CMakeCache.txt
中,并且如果我呼叫cmake -DCMAKE_BUILD_CONFIG=B ..
也不会更新。
在寻找解决方案时,我发现了一个unset(CMAKE_BUILD_CONFIG CACHE)
调用,并将其添加到CMakeLists.txt
的末尾,但这并不能解决问题。
谢谢
答案 0 :(得分:1)
但是,此后似乎已将CMAKE_BUILD_CONFIG保存在 CMakeCache.txt,如果我调用cmake则不会更新 -DCMAKE_BUILD_CONFIG = B ...
这应该可以正常工作(已在CMake 2.8.12及更高版本中测试)。
引用CMake documentation(强调我的意思):
-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
如果这对您不起作用,则意味着您的构建脚本正在执行您没有告诉我们的事情,从而积极地阻止了该工作。
答案 1 :(得分:0)
这不是最好的解决方案,但是虽然没有更好的解决方案:
您可以删除CMakeCache.txt以防止出现此问题。我建议从当前文件夹中移出CMakeCache.txt,运行“ cmake”和“ make”,然后检查其是否有效。