什么会导致 CMake 选项不起作用?

What can cause a CMake option not work?

我正在准备一个可以使用和不使用 GUI 的应用程序,所以我在 CMakeLists.txt 中使用命令

option (NEED_GUI "Include Qt support"  OFF) 

if (NEED_GUI)
  message("****GUI should be OFF****")
  add_subdirectory(QtGUI)   # The Qt-based graphics routines
endif (NEED_GUI)

尽管我将选项设置为 OFF,但我收到了消息并且库已构建。在哪里查找错误?

将我的评论变成答案

您的代码看起来不错。所以我假设这里的问题是 option() 确实通过初始配置步骤将给定的值传输到您的 CMakeCache.txt 中。之后,您只能通过修改 NEED_GUI 的缓存条目来更改它。在生成构建环境后更改 CMakeLists.txt 中的选项将不会再更新缓存。

参考资料

  • Advantages of using CMake option command rather than set?
  • How to tell whether CMake used initial value for an option?
if (NEED_GUI MATCHES ON)

是正确的用法,而不是

if (NEED_GUI)