从父CMakeLists.txt覆盖CMake中的默认选项(…)值

我正在尝试在源代码树中包含几个第三方库,只需对其构build系统进行最小的更改便于升级。 他们都使用CMake,就像我一样,所以在我自己的CMakeLists.txt中,我可以使用add_subdirectory(extern/foo)作为libfoo。

但是,foo CMakeLists.txt编译testing工具,编译文档,我不需要的共享库等等。 libfoo的作者有先见之明,通过选项来控制这些选项 – 例如option(FOO_BUILD_SHARED "Build libfoo shared library" ON) – 这意味着我可以通过CMake命令行设置它们。 但是我想在默认情况下closures,并通过命令行覆盖。

我曾尝试在add_subdirectory(extern/foo)之前set(FOO_BUILD_SHARED OFF) add_subdirectory(extern/foo) 。 这样做的结果是,在第二次和以后的构build尝试中,不会尝试构build共享库,而不是在第一个构build共享库时,这是我真正需要加速的。

这是可能的,还是我需要维护这些项目分叉CMakeLists.txt?

尝试在CACHE中设置variables

 SET(FOO_BUILD_SHARED OFF CACHE BOOL "Build libfoo shared library") 

注意:您需要指定variablestypes和描述,以便CMake知道如何在GUI中显示此条目。