虽然艰苦学习如何让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
答案 0 :(得分:2)
事实上,您只能将ExternalProject
用于“克隆”(就像执行便携式git子模块的cmake方式一样)。
所有内容都解释here。
注意:这是一个测试它的宠物项目:mizux/cmake-external.git
答案 1 :(得分: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()