2016-06-24 3 views
6

ich mit einem Problem konfrontiert, wenn ich Google-Test zu verwenden versuchteWie klonen und externe Integration (von git) Cmake Projekt in lokale ein

viele Handbücher gibt es, wie ExternalProject_Add für das Hinzufügen von Gtest zu verwenden, um in das Projekt, aber die meisten beschreiben eine Methode auf der Grundlage der Download-Zip-Archiv mit gtest und bauen sie

wie wir gtest github gehostet und CMake-basierte Projekt kennen. also würde ich gerne native für cmake finden.

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}) 

und fügte hinzu, dieses Skript aus meinem Cmake Projekt wie: , wenn dies ein Kopf nur Projekt sei, würde ich so etwas wie schreiben

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake.modules/") 
include(AddGTest) 
.... 
add_dependencies(${PROJECT_NAME} gtest) 

aber dies erfordert einen Build-Schritt. Wie sollte das implementiert werden?

  1. durch Hinzufügen von BUILD_COMMAND in ExternaProject_Add? und verlinken mit produzierten Bibliotheken?
  2. oder indem ich gtests cmakelists in mein Projekt einfüge, so etwas?

    add_subdirectory ($ {CMAKE_SOURCE_DIR} \ ext \ src \ Gtest \ googletest \ CMakeLists.txt)

dies, weil auf den Moment des Projekts laden Sie den Ordner nicht existiert nicht richtige Weg ist

  1. andere Möglichkeiten?

was ist ein korrekter/lieber Weg?

Antwort

10

Ich würde mit dem ersten Ansatz gehen. Sie müssen keinen Build-Befehl angeben, da cmake standardmäßig verwendet wird. Das könnte so aussehen:

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) 

Ich weiß nicht, ob dies der richtige/bevorzugte Weg ist, wenn es überhaupt einen gibt. Wenn Sie Ihren zweiten Ansatz implementieren möchten, müssen Sie zuerst den Code mit execute_process herunterladen.

+0

Danke, das ist was ich hören möchte - "cmake tut dies standardmäßig", fand dies nicht im Handbuch und suchte nach Build-Befehl – amigo421