cmake: actualización de proyecto externo y un trabajo fuera de línea

Estaba usando proyectos externos para mantener las bibliotecas actualizadas durante mucho time, algo así como:

include(AddAsio) 

y script AddAsio.cmake como este:

 cmake_minimum_requinetworking(VERSION 2.8.8) include(ExternalProject) find_package(Git REQUIRED) ExternalProject_Add( asio PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/include/ext GIT_REPOSITORY https://github.com/chriskohlhoff/asio.git GIT_TAG master TIMEOUT 10 UPDATE_COMMAND ${GIT_EXECUTABLE} pull CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" LOG_DOWNLOAD ON ) ExternalProject_Get_Property(asio source_dir) set(ASIO_INCLUDE_DIR ${source_dir}/asio/include CACHE INTERNAL "Path to include folder for Asio") include_directories(${INCLUDE_DIRECTORIES} ${ASIO_INCLUDE_DIR}) message("asio source dir" ${ASIO_INCLUDE_DIR}) 

no hubo problemas durante mucho time, sin embargo, ayer me enfrenté a un problema cuando mi proveedor de Internet no funcionaba y traté de trabajar sin connection.

este script intenta actualizar (git pull, mirar la definición del proyecto externo) cada vez que se crea, incluso todos los encabezados necesarios existen allí. y rompe el process de compilation en caso de que no haya connection.

¿Alguna idea de cómo mantener actualizado este mecanismo de componentes pero no detener un edificio en caso de que las bibliotecas ya existan localmente?

AFAIK, no hay una manera fácil de hacer que un proyecto externo no se actualice al examinar si existen ciertos files. Sin embargo, puede establecer UPDATE_DISCONNECTED en un proyecto externo o establecer la propiedad EP_UPDATE_DISCONNECTED de un directory para deshabilitar la actualización de proyectos externos. Junto con una opción de compilation, el process podría hacerse de forma dinámica. Por ejemplo, podría comstackr el siguiente proyecto sin actualizar foo y barra configurando con el command cmake -DBUILD_OFFLINE=ON

 cmake_minimum_requinetworking (VERSION 2.8.11) project (myrootproject C) add_library(hello SHARED hello.c) option(BUILD_OFFLINE "Build offline" OFF) if (${BUILD_OFFLINE}) set_property(DIRECTORY ${myrootproject_SOURCE_DIR} PROPERTY EP_UPDATE_DISCONNECTED 1) endif() include(ExternalProject) ExternalProject_Add(foo SVN_REPOSITORY svn://foobar.org/ ) ExternalProject_Add(bar GIT_REPOSITORY https://github.com/blah/blah )