cmake:外部项目更新和脱机工作

时间:2016-06-08 09:35:23

标签: c++ git 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 个答案:

答案 0 :(得分:1)

AFAIK,没有简单的方法可以通过检查某些文件是否存在来使外部项目不更新。但是,您可以将UPDATE_DISCONNECTED设置为外部项目或设置目录的EP_UPDATE_DISCONNECTED属性以禁用外部项目的更新。除了构建选项外,还可以动态创建该过程。例如,您可以通过使用命令cmake -DBUILD_OFFLINE=ON

进行配置来构建以下项目而无需更新 foo bar
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
)