CMAKE 选项的默认值不起作用

Ste*_*art 6 cmake

如果我有以下行。然后我希望TEST_OPTION被设置ON为默认。

option( TEST_OPTION "A test option" ON)
Run Code Online (Sandbox Code Playgroud)

当我测试它时,它似乎不是ON默认的。为了测试,我正在编译一个简单的应用程序:

int main() {

  #ifdef TEST_OPTION
    #error "TEST_OPTION encountered"
  #endif 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我还有一个简单的 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)
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用 进行编译$ cmake && cmake --build .,我预计会遇到编译错误,但我没有!如果我替换option( TEST_OPTION ... )set(TEST_OPTION ON),那么我会得到我预期的编译错误。

有人可以解释为什么option()默认情况下不将该选项设置为默认值吗?

Ste*_*art 8

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