2016-06-24 61 views
6

我面臨當我嘗試使用谷歌測試問題如何克隆和整合外部(從GIT)cmake的項目爲當地一個

有很多手冊如何使用ExternalProject_Add爲增加GTEST成該項目,但是其中大部分描述了一個基於gtest下載zip壓縮文件的方法,並構建它

我們知道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) 

然而,這需要構建步驟。 這應該如何實施?

  1. 通過將BUILD_COMMAND添加到ExternaProject_Add中?並與生產的庫鏈接?
  2. 或者將gtest的cmakelists加入到我的項目中,像這樣?

    add_subdirectory($ {CMAKE_SOURCE_DIR} \分機的\ src \ GTEST \ googletest \的CMakeLists.txt)

這並不是因爲對項目的時刻不存在

加載該文件夾正確的方法
  1. 其他方式?

什麼是正確/偏好的方式?

回答

10

我會用第一種方法。您不需要指定構建命令,因爲默認情況下使用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下載代碼。

+0

謝謝,這是我想聽到的 - 「cmake默認是這樣做的」,沒有在手冊中找到它,並且查找了構建命令 – amigo421