【问题标题】:ExternalProject_Add autogen project prevent configure on rebuildExternalProject_Add autogen 项目防止在重建时配置
【发布时间】:2018-03-05 02:35:15
【问题描述】:

我在 linux 上有一个 CMake 项目,我正在使用 ExternalProject 构建 Google Protobuf。它工作得很好,但是任何后续构建仍然调用外部项目中的配置步骤(这很烦人,因为 protobuf 是一个具有相当长步骤的自动生成项目)。我使用了UPDATE_DISCONNECTED 参数,所以它不会重新克隆,这对某些人有帮助,但你会认为如果它没有重新克隆,它就不需要重新配置或重新构建/安装。如何让 CMake 只构建一次并跳过后续构建(即构建目录中的下一个 make)?

这是我的CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11)
project(pbuf_test)

include(${PROJECT_SOURCE_DIR}/cmake/protogen.cmake)

set(PBUF_DIR ${PROJECT_BINARY_DIR}/protobuf)

include(ExternalProject)
ExternalProject_Add(protobuf
    PREFIX ${PROTOBUF_DIR}
    GIT_REPOSITORY https://github.com/google/protobuf.git
    GIT_TAG v3.4.1
    UPDATE_DISCONNECTED 1
    BUILD_IN_SOURCE 1
    CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${PBUF_DIR}
)

set(PBUF_INCLUDE_DIR ${PBUF_DIR}/include)
set(PBUF_LIBRARY ${PBUF_DIR}/lib/libprotobuf.so)
set(PBUF_PROTOC ${PBUF_DIR}/bin/protoc)

file(GLOB PBUF_FILES "${PROJECT_SOURCE_DIR}/msg/*.proto")
custom_protobuf_generate_cpp(PBUF_SRCS PBUF_HDRS ${PBUF_FILES})

include_directories(
    ${PROJECT_BINARY_DIR}
    ${PBUF_INCLUDE_DIR}
)

add_executable(${PROJECT_NAME} main.cpp ${PBUF_SRCS} ${PBUF_HDRS})
add_dependencies(${PROJECT_NAME} protobuf)
target_link_libraries(${PROJECT_NAME}
    ${PBUF_LIBRARY}
)   

Full example project here

【问题讨论】:

标签: cmake configure autogen


【解决方案1】:

我知道的唯一方法是将构建外部项目的步骤移到add_command 调用的脚本中。然后在你的项目和外部项目的 output/lib/binary 之间添加一个依赖。

  • 专业版:避免不必要的重建
  • 专业版:避免外部库的意外更新
  • 缺点:在外部存储库更新的情况下不重建(这是必需的)
  • 缺点:编写此类脚本的额外工作

顺便说一句:在我的项目中,我们很难做到。但我们不希望外部库有任何意外更新。

【讨论】:

    【解决方案2】:

    目前看来,仍然使用 ExternalProject 的解决方案是将配置步骤移至下载步骤。

    类似的东西。请注意,目标的名称是它希望下载创建的目录。由于使用了 && 连接符,这可能仅适用于某些操作系统:我对 cmake 有点陌生。

    ExternalProject_Add(protobuf
        PREFIX ${PROTOBUF_DIR}
        DOWNLOAD_COMMAND git clone https://github.com/google/protobuf.git protobuf &&
            cd protobuf &&
            git checkout v3.4.1 &&
            ./autogen.sh &&
            ./configure --prefix=${PBUF_DIR}
        UPDATE_COMMAND git pull
        UPDATE_DISCONNECTED 1
        BUILD_IN_SOURCE 1
        CONFIGURE_COMMAND ""
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      相关资源
      最近更新 更多