Comment cloner et d'intégrer externe (à partir de git) cmake projet en local

Je me suis confronté à un problème lorsque j'ai essayé d'utiliser Google Test.

Il y a beaucoup de manuels sur la façon d'utiliser ExternalProject_Add pour l'ajout de gtest dans le projet, mais la plupart de celles-ci décrivent une méthode basée sur le téléchargement de l'archive zip avec gtest et de le construire.

Comme nous le savons gtest est github-hébergé et cmake-fondé du projet. Donc j'aimerais trouver natif de cmake.

Si ce serait un en-tête uniquement de projet, j'aimerais écrire quelque chose comme:

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

et ajouter ce script à partir de mon cmake projet comme:

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

Toutefois, cela exige une étape de génération.

Comment cela doit-il être mis en œuvre?

  1. En ajoutant BUILD_COMMAND en ExternaProject_Add et des liens avec les produits libs?
  2. Ou en incluant gtest de cmakelists dans mon projet, quelque chose comme ceci:

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

ce n'est pas correcte parce que sur le moment de la projet de charger le dossier n'existe pas.

  1. D'une autre façon?

Ce qui est une bonne/préférez?

OriginalL'auteur amigo421 | 2016-06-24