2017-09-23 16 views
3

私はLinux上でCMakeプロジェクトを持っており、私はExternalProjectを使ってGoogle Protobufを構築しています。それは素晴らしいですが、後続のビルドでは、外部プロジェクトの設定ステップが呼び出されます(protobufはかなり長いステップの自動プロジェクトです)。私はUPDATE_DISCONNECTED引数を使って再クローン化しないでください。再クローン化しないと、再クローン化しないと、再構成や再構築/インストールは必要ありません。どのように私はCMakeに一度だけビルドさせ、その後のビルド(ビルドディレクトリから私の次のmake)をスキップすることができますか?ここでExternalProject_Add autogen projectは再構築時にconfigureを防ぎます

は、私が知っている唯一の方法はadd_commandによって呼び出されるスクリプトに外部のプロジェクトをビルドする手順を移動することです私の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

答えて

0

です。そして、プロジェクトと外部プロジェクトの出力/ lib /バイナリの間に依存関係を追加します。

  • プロ:不要な
  • Proを再構築回避:外部LIBの予想外の更新を回避
  • コン:外部リポジトリを更新しました(これが必要です)場合には
  • コンを再構築しません:追加そのようなスクリプトを書く作業

私は私のプロジェクトの中で、私たちは難しい方法です。しかし、私たちは外部ライブラリの予期しない更新を望んでいません。

関連する問題