如何展平 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
。对我来说,诀窍是 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()
在努力学习如何让 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
。对我来说,诀窍是 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()