选项的CMAKE默认值不起作用

dnph8jn4  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(279)

如果我有下面这行代码,那么我希望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()在默认情况下不将该选项设置为默认值吗?

qv7cva1a

qv7cva1a1#

解决方案:当你改变一个选项的默认值时,cmake缓存似乎没有刷新。因此,通过首先选择“OFF”来构建它,“ON”选项被完全忽略了。为了解决这个问题,我只需要删除生成的cmake工件,然后再次运行cmake

jc3wubiy

jc3wubiy2#

对于您的情况,您可以使用cmake -UTEST_OPTION。这个参数也允许全局匹配。对于我的情况,我通过使用cmake -UCONFIG_BUILD_* ...更新缓存的参数来修复这个问题,其中CONFIG_BUILD_TESTS默认为ON

相关问题