如何克隆并将外部(从git)集成到本地项目中
How to clone and integrate external (from git) cmake project into local one
我在尝试使用Google测试时遇到问题。
有很多关于如何将ExternalProject_Add
用于将GTEST添加到项目中的手册,但是其中大多数描述了一种基于使用GTEST下载Zip Archive并构建的方法。
我们知道,gtest是Github托管的,基于CMAKE的项目。所以我想找到本地cmake方式。
如果这是一个仅标题项目,我会写一些类似的内容:
cmake_minimum_required(VERSION 2.8.8)
include(ExternalProject)
find_package(Git REQUIRED)
ExternalProject_Add(
gtest
PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/ext
GIT_REPOSITORY https://github.com/google/googletest.git
TIMEOUT 10
UPDATE_COMMAND ${GIT_EXECUTABLE} pull
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
LOG_DOWNLOAD ON
)
ExternalProject_Get_Property(gtest source_dir)
set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include CACHE INTERNAL "Path to include folder for GTest")
set(GTEST_ROOT_DIR ${source_dir}/googletest CACHE INTERNAL "Path to source folder for GTest")
include_directories(${INCLUDE_DIRECTORIES} ${GTEST_INCLUDE_DIR} ${GTEST_ROOT_DIR})
message(${GTEST_INCLUDE_DIR})
并添加我的cmake项目中的脚本,例如:
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake.modules/")
include(AddGTest)
....
add_dependencies(${PROJECT_NAME} gtest)
但是,这需要一个构建步骤。
应该如何实施?
- 通过将
BUILD_COMMAND
添加到ExternaProject_Add
中并与生产的libs链接? - 或通过将GTEST的CMakelists包括在我的项目中,类似的东西:
add_subdirectory (${CMAKE_SOURCE_DIR}extsrcgtestgoogletestCMakeLists.txt)
这是不正确的方式,因为在项目时刻加载文件夹不存在。
- 还有其他方法吗?
什么是正确/更喜欢的方式?
我会采用第一种方法。您无需指定构建命令,因为默认使用CMAKE。这看起来像:
cmake_minimum_required(VERSION 3.0)
project(GTestProject)
include(ExternalProject)
set(EXTERNAL_INSTALL_LOCATION ${CMAKE_BINARY_DIR}/external)
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_INSTALL_LOCATION}
)
include_directories(${EXTERNAL_INSTALL_LOCATION}/include)
link_directories(${EXTERNAL_INSTALL_LOCATION}/lib)
add_executable(FirstTest main.cpp)
add_dependencies(FirstTest googletest)
target_link_libraries(FirstTest gtest gtest_main pthread)
我不知道这是否是正确/首选的方法。如果您想实现第二种方法,则必须先使用execute_process下载代码。
相关文章:
- 在VS2019项目中集成ImageMagick:x64-windows-static library
- 将Qt集成到现有的VS项目中以取代WinAPI
- 基本 Cuda C++项目集成问题
- 如何使用CMake将QtMultimedia组件集成到项目中?
- 如何在electrolon项目中集成qt原生窗口
- C++ 项目在 Jenkins 中的持续集成
- 如何使用CMAKE将C 项目与NodeJ集成
- 如何将OpenCV 4.0集成到纯C Android NDK项目中
- 将CMAKE项目集成到Buck中的最佳方法是什么?
- 如何克隆并将外部(从git)集成到本地项目中
- 如何将CMake项目与基于GYP的库集成
- "namespaced" CMake 中包含路径,并且C++项目在将项目集成在一起时是否有好处?
- 如何创建将Ogre3D与OpenCV集成的项目
- 如何将OpenCV集成到Qt Creator Android项目中
- 对我的C++ OpenFrameworks项目中wpa_ctrl函数的未定义引用.需要帮助集成此 c 库
- 将C++ OpenGL 项目与另一个C++项目集成
- 在将GTest集成到我的项目时,GTest -printer .h出现错误
- 针对基于c++ / qt的项目的构建服务器/持续集成建议
- 将Google Analytics集成到c++ OpenFrameworks桌面项目中的最佳方法是什么?
- 在Swift项目中集成Box2d会出现cassert file not found错误