J'ai rencontré un problème lorsque j'essayais d'utiliser Google Test.
Il existe de nombreux manuels sur la façon d'utiliser ExternalProject_Add
Pour ajouter gtest au projet, mais la plupart décrivent une méthode basée sur le téléchargement d'archive Zip avec gtest et sa création.
Comme nous le savons, gtest est un projet hébergé par github et basé sur cmake. Je voudrais donc trouver le chemin natif de cmake.
S'il s'agissait d'un projet uniquement en-tête, j'écrirais 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 ajoutez ce script de mon projet cmake comme:
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake.modules/")
include(AddGTest)
....
add_dependencies(${PROJECT_NAME} gtest)
Cependant, cela nécessite une étape de construction.
Comment cela devrait-il être mis en œuvre?
BUILD_COMMAND
Dans ExternaProject_Add
Et en établissant un lien avec les bibliothèques produites?add_subdirectory (${CMAKE_SOURCE_DIR}\ext\src\gtest\googletest\CMakeLists.txt)
ce n'est pas le bon chemin car au moment du chargement du projet le dossier n'existe pas.
Quelle est la manière correcte/préférée?
J'irais avec la première approche. Vous n'avez pas besoin de spécifier une commande de construction car cmake est utilisé par défaut. Cela pourrait ressembler à:
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)
Je ne sais pas si c'est la manière correcte/préférée s'il y en a même une. Si vous souhaitez implémenter votre deuxième approche, vous devez d'abord télécharger le code avec execute_process.