【问题标题】:cmake: external project update and a work offlinecmake:外部项目更新和离线工作
【发布时间】:2016-06-08 09:35:22
【问题描述】:

我一直在使用外部项目来使库保持最新状态很长一段时间 类似:

 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,查看外部项目定义),甚至所有必需的标头都确实存在。并在没有连接的情况下中断构建过程。

知道如何保持这种组件更新机制,但在本地已经存在库的情况下不停止构建?

【问题讨论】:

    标签: c++ git cmake


    【解决方案1】:

    AFAIK,没有简单的方法可以通过检查某些文件是否存在来使外部项目不更新。但是,您可以将UPDATE_DISCONNECTED 设置为外部项目或设置目录的EP_UPDATE_DISCONNECTED 属性以禁用外部项目的更新。除了构建选项外,该过程可以动态进行。例如,您可以在不更新 foobar 的情况下通过使用命令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
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多