我是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并启用我需要的选项会更容易。有可能吗?
答案 0 :(得分:2)
没有执行此操作的命令。
option
命令只是将具有给定名称和默认值的变量添加到CMakeCache。与set
命令一样,它不会覆盖缓存中的现有值,即使该值与为该选项指定的默认值不同。
为外部库设置选项的惯用方法确实是在调用第三方CMake脚本之前手动set
缓存中的所有变量。我建议你这样做。
您尝试执行的操作的问题是,设置选项必须在调用add_subdirectory
之前发生,但检测该脚本设置的选项是唯一可能的在之后的那个电话。理论上,您可以使用get_cmake_property
命令枚举SDL的CMake脚本设置的所有缓存变量,然后在FALSE
调用后将其重置为add_subdirectory
。但是,您必须第二次重新运行CMake才能使这些更改生效。
我强烈建议不要使用这些黑客。在将来升级SDL时,很容易意外搞乱选项,并且不得不向用户解释他们必须运行CMake两次才能构建成功。