2016-06-08 2 views
0

я использовал внешние проекты, чтобы сохранить библиотеки в актуальном состоянии в течение длительного времени что-то вроде:CMake: внешнее обновление проекта и работать в автономном режиме

include(AddAsio) 

и сценарий AddAsio.cmake так:

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

не было проблемы в течение длительного времени, однако вчера я столкнулся с проблемой, когда мой интернет-провайдер не работал, и я попытался работать в автономном режиме.

Этот скрипт пытается обновить (git pull, посмотреть на определение внешнего проекта) каждый раз при сборке, даже все необходимые заголовки там существуют. и прерывает процесс сборки в случае отсутствия соединения.

любая идея, как сохранить этот механизм обновления компонентов, но не останавливать здание, если библиотеки уже существуют локально?

ответ

1

AFAIK, нет простого способа сделать внешний проект не обновляемым путем изучения наличия определенных файлов. Однако вы можете установить UPDATE_DISCONNECTED во внешний проект или установить EP_UPDATE_DISCONNECTED свойство каталога, чтобы отключить обновление внешних проектов. Наряду с возможностью сборки процесс может быть выполнен динамически. Например, можно построить следующий проект без обновления Foo и бар путем настройки с помощью команды cmake -DBUILD_OFFLINE=ON

cmake_minimum_required (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 
) 
Смежные вопросы