Cómo clonar e integrar un proyecto cmake externo (desde git) al local

Me enfrenté a un problema cuando intentaba usar Google Test

hay muchos manuales sobre cómo usar ExternalProject_Add para agregar gtest al proyecto, sin embargo, la mayoría describe un método basado en el file zip de descarga con gtest y lo comstack

ya que sabemos gtest github alojado y el proyecto basado en cmake. así que me gustaría encontrarme nativo para poder hacerlo. si fuera un proyecto solo de encabezado, escribiría algo como:

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

y agregué esta secuencia de commands de mi proyecto cmake como:

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

Sin embargo, esto requiere un paso de compilation. ¿Cómo debe ser implementado esto?

  1. al agregar BUILD_COMMAND en ExternaProject_Add? y enlazar con libs producidas?
  2. o al include cmakelists de gtest en mi proyecto, algo como esto?

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

esta no es la forma correcta porque en el momento de la carga del proyecto, la carpeta no existe

  1. ¿otras maneras?

¿Cuál es la forma correcta / preferida?

Me gustaría ir con el primer acercamiento. No necesita especificar un command de compilation porque cmake se usa de forma pnetworkingeterminada. Esto podría verse así:

 cmake_minimum_requinetworking(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) 

No sé si esta es la forma correcta / preferida si aún hay una. Si desea implementar su segundo enfoque, primero deberá download el código con execute_process.