如何展平 CMake Superbuild?

How Do I Flatten A CMake Superbuild?

在努力学习如何让 CMake 做我在 Visual Studio 跨平台项目中需要的东西的同时,我了解了 ExternalProject_Add,它很好地解决了我所有的需求。摘录:

ExternalProject_Add(googletest
    PREFIX "${CMAKE_BINARY_DIR}/Downloads/googletest"
    GIT_REPOSITORY "https://github.com/google/googletest.git"
    GIT_TAG 718fd88d8f145c63b8cc134cf8fed92743cc112f 
    BINARY_DIR "${CMAKE_BINARY_DIR}/Downloads/googletest/${CMAKE_CFG_INTDIR}/build"
    CMAKE_ARGS
        "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/Dependencies/googletest"
        "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
        "-DCMAKE_DEBUG_POSTFIX=''"
        "-Dgtest_force_shared_crt=ON"
)

它引入了几个这样的依赖项,它在 Linux 和 Windows 上运行良好,你不能指望安装像 LLVM 这样的东西。问题是我最终得到 "superbuild" 的 Makefile/Solution 和我的实际项目的另一个。它运作良好,但很混乱。我一直在考虑尝试 git 模块来引入依赖项,但我不确定这是否会奏效。我怎样才能降低复杂性以便只有一个构建系统?

基数 CMakeLists.txt 位于 https://github.com/coder0xff/Plange/blob/master/CMakeLists.txt

事实上,您可以将 ExternalProject 仅用于 "cloning"(就像使用 cmake 制作可移植 git 子模块的方法)。

一切解释here.

注意:这里有一个宠物项目来测试它:mizux/cmake-external.git

我已经将我的项目更新为完全不使用 ExternalProject_Add,而是使用 add_subdirectory。对我来说,诀窍是 setadd_subdirectory.

之前的任何相关变量
function(add_googletest)
    set(BUILD_GMOCK OFF CACHE BOOL "")
    set(BUILD_GTEST ON CACHE BOOL "")
    set(INSTALL_GMOCK OFF CACHE BOOL "")
    set(INSTALL_GTEST ON CACHE BOOL "")
    set(gtest_force_shared_crt ON CACHE BOOL "Force gtest to used shared VC++ CRT")
    add_subdirectory(source/googletest)
    include_directories("${gtest_SOURCE_DIR}/include")
endfunction(add_googletest)
add_googletest()