我是 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/