我正在使用外部项目让图书馆保持最新状态 类似的东西:
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,查看外部项目定义),甚至所有必需的标头都存在。并且在没有连接的情况下打破构建过程。
任何想法如何保持这种组件更新机制,但如果本地已存在库,则不会停止构建?
答案 0 :(得分:1)
AFAIK,没有简单的方法可以通过检查某些文件是否存在来使外部项目不更新。但是,您可以将UPDATE_DISCONNECTED
设置为外部项目或设置目录的EP_UPDATE_DISCONNECTED
属性以禁用外部项目的更新。除了构建选项外,还可以动态创建该过程。例如,您可以通过使用命令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
)