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?
- En ajoutant
BUILD_COMMAND
enExternaProject_Add
et des liens avec les produits libs? - 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.
- D'une autre façon?
Ce qui est une bonne/préférez?
OriginalL'auteur amigo421 | 2016-06-24
Vous devez vous connecter pour publier un commentaire.
Je voudrais aller avec la première approche. Vous n'avez pas besoin de spécifier une commande de construction parce que cmake est utilisé par défaut. Cela pourrait ressembler à:
Je ne sais pas si c'est le bon/moyen préféré si il n'y a même un. Si vous voulez intégrer votre deuxième approche, vous devez télécharger le code avec execute_process premier.
Cet article les documents de façon à les gtest manuel de recommande également d'. CMake 3.11 ajouté FetchContent module qui s'étend de l'approche et utilise gtest comme l'un de ses exemples.
OriginalL'auteur David Marquant