c++ - CMake 禁用库的所有选项

标签 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)

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

最佳答案

没有命令可以执行此操作。

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

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

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

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

关于c++ - CMake 禁用库的所有选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25508985/

相关文章:

c++ - 如何创建可以重新创建的自定义需求

c++ - bitbake grpc 交叉编译/配置失败,出现错误 c-ares::cares 引用文件/usr/lib/libcares.so.2.2.0

visual-studio - CMake - 如何在安装(目标)中安装(目录)?

c - 当可移植性最重要时使用 C 的 SDL 与 SFML?

sdl - 如何在 SDL 2.0 中绘制矩形轮廓

c - 使用 SDL 播放 mp3 文件时无法识别的音乐格式

C++使用for循环绘制三角形带 - 顶点,索引

c++ - 打印 3D vector

c++ - Qt::Concurrent 与成员函数映射

cmake - 如何使用不同的 3rd-party 库构建 cmake 项目