CMake禁用库的所有选项

CMake disable all options for a library

本文关键字:选项 CMake      更新时间:2023-10-16

我是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并启用我需要的选项会更容易。有可能吗?

没有任何命令可以做到这一点。

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

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

您尝试执行的操作的问题是,必须在调用add_subdirectory之前设置选项,但只有在调用之后才能检测该脚本设置了哪些选项。理论上,您可以使用get_cmake_property命令枚举SDL的CMake脚本设置的所有缓存变量,然后在add_subdirectory调用后将它们重置为FALSE。但是,您必须再次运行CMake才能使这些更改变为活动状态。

我强烈建议不要使用这种手段。在将来升级SDL时,很容易意外地弄乱选项,而且必须向用户解释他们必须运行两次CMake才能成功构建,这是不好的。