如果我有下面这句话。然后,我希望默认情况下将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 .编译,我希望会遇到编译错误,但我没有!如果我将option( TEST_OPTION ... )替换为set(TEST_OPTION ON),那么我将得到我所期望的编译错误。
有人能解释为什么option()不将缺省值设置为默认值吗?
发布于 2017-06-23 11:40:58
解决方案:当您更改选项的默认值时,cmake缓存似乎不会刷新。因此,首先用选中的"OFF“构造它,就完全忽略了"ON”选项。为了解决这个问题,我只需删除生成的cmake工件并再次运行cmake。
发布于 2022-10-27 12:29:18
对于您的情况,您可以使用cmake -UTEST_OPTION。这个论点也考虑到了全球化。在我的例子中,我通过用cmake -UCONFIG_BUILD_* ...更新缓存的参数来修正这个问题,其中CONFIG_BUILD_TESTS默认为ON。
https://stackoverflow.com/questions/44719963
复制相似问题