如何禁用 CMAKE 选项

How to disable a CMAKE option

${CMAKE_CURRENT_SOURCE_DIR}/JUCE 上,有:

option(JUCE_BUILD_EXTRAS "Add build targets for the Projucer and other tools" OFF)

if(JUCE_BUILD_EXTRAS)
    add_subdirectory(extras)
endif()

link: https://github.com/juce-framework/JUCE/blob/master/CMakeLists.txt#L57

所以这就是我所做的:

set(JUCE_BUILD_EXTRAS OFF)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/JUCE)

但是它仍然试图构建附加功能。我在 Android 工作室。

我该怎么办?

我也试过了set(JUCE_BUILD_EXTRAS OFF)

默认值为 OFF,即使这样它也会尝试构建。

尝试在 Android CMAKE 上禁用某些内容时,我总是遇到这些错误,但总是失败

保证这将被父 CMakeLists.txt 正确覆盖的最简单方法是将其设置为具有 FORCEd 值的 CACHE 变量:

set(JUCE_BUILD_EXTRAS OFF CACHE BOOL "" FORCE)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/JUCE)

这将确保定义 option 的项目的先前配置中可能已经存在的任何状态将被覆盖并首先被拾取。


从技术上讲,option 的文档指出:

... If is already set as a normal or cache variable, then the command does nothing.

但是,这仅在没有先前配置的情况下才成立——因此这仅在变量设置为 第一次配置

之前有效

在实践中,我发现 FORCE 方法更可靠。