1

在努力学习如何让 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 之类的东西。问题是我最终得到了“超级构建”的 Makefile/解决方案,以及我的实际项目的另一个。它运作良好,但它很混乱。我一直在考虑尝试使用 git 模块来引入依赖项,但我不确定这是否能正常工作。如何降低复杂性以便只有一个构建系统?

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

4

2 回答 2

3

实际上,您可以ExternalProject仅用于“克隆”(例如使用可移植 git 子模块的 cmake 方式)。

一切都在这里解释。

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

于 2018-01-29T12:19:50.700 回答
0

我已经将我的项目更新为根本不使用ExternalProject_Add,而是使用add_subdirectory. 对我来说,诀窍是set之前的任何相关变量add_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()
于 2018-07-23T22:27:14.113 回答