CMake禁用库的所有选项

时间:2014-08-26 14:56:17

标签: c++ cmake sdl

我是cmake的新手,我有一个SDL源代码目录,我想在我的项目中使用它。我将整个源目录复制到我的项目中并编写了

add_subdirectory(SDL2-2.0.3)

进入我的CMakeLists.txt文件。现在的问题是:SDL默认启用了很多选项:

set_option(VIDEO_COCOA         "Use Cocoa video driver" ${APPLE})
set_option(DIRECTX             "Use DirectX for Windows audio/video" ${WINDOWS})
...

我不想要所有这些,只需要使用两三个模块。如何一次禁用所有这些并且只启用我需要的两个/三个?

我试过

option(DIRECTX "Use DirectX for Windows audio/video" OFF)

但我不喜欢在文件中重复我不想要的所有选项,将所有选项默认为OFF并启用我需要的选项会更容易。有可能吗?

1 个答案:

答案 0 :(得分:2)

没有执行此操作的命令。

option命令只是将具有给定名称和默认值的变量添加到CMakeCache。与set命令一样,它不会覆盖缓存中的现有值,即使该值与为该选项指定的默认值不同。

为外部库设置选项的惯用方法确实是在调用第三方CMake脚本之前手动set缓存中的所有变量。我建议你这样做。

您尝试执行的操作的问题是,设置选项必须在调用add_subdirectory之前发生,但检测该脚本设置的选项是唯一可能的之后的那个电话。理论上,您可以使用get_cmake_property命令枚举SDL的CMake脚本设置的所有缓存变量,然后在FALSE调用后将其重置为add_subdirectory。但是,您必须第二次重新运行CMake才能使这些更改生效。

我强烈建议不要使用这些黑客。在将来升级SDL时,很容易意外搞乱选项,并且不得不向用户解释他们必须运行CMake两次才能构建成功。