如果我有下面这行代码,那么我希望TEST_OPTION
在默认情况下被设置为ON
。
option( TEST_OPTION "A test option" ON)
当我测试它的时候,它的默认值似乎不是ON
。
int main() {
#ifdef TEST_OPTION
#error "TEST_OPTION encountered"
#endif
return 0;
}
我还有一个简单的CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
project(test)
add_executable(test main.cpp)
option( TEST_OPTION "A test option" ON)
if(TEST_OPTION)
target_compile_definitions(test PRIVATE TEST_OPTION)
endif(TEST_OPTION)
如果我尝试用$ cmake && cmake --build .
编译,我会遇到编译错误,但是我没有!如果我用set(TEST_OPTION ON)
替换option( TEST_OPTION ... )
,那么我会得到我所期望的编译错误。
有人能解释一下为什么option()
在默认情况下不将该选项设置为默认值吗?
2条答案
按热度按时间qv7cva1a1#
解决方案:当你改变一个选项的默认值时,cmake缓存似乎没有刷新。因此,通过首先选择“OFF”来构建它,“ON”选项被完全忽略了。为了解决这个问题,我只需要删除生成的cmake工件,然后再次运行
cmake
。jc3wubiy2#
对于您的情况,您可以使用
cmake -UTEST_OPTION
。这个参数也允许全局匹配。对于我的情况,我通过使用cmake -UCONFIG_BUILD_* ...
更新缓存的参数来修复这个问题,其中CONFIG_BUILD_TESTS
默认为ON
。