2017-02-08 20 views
0

私は外部ライブラリを使用するプロジェクトを持っています。プロジェクトのCMakeLists.txtは次のようになります。このようなCMake:外部プロジェクトを再構築

cmake_minimum_required(VERSION 3.6.0) 

project(my-project) 

set(CMAKE_CXX_STANDARD 14) 

include(ExternalProject) 
find_package(Git REQUIRED) 

ExternalProject_Add(library 
     PREFIX ${my-project_SOURCE_DIR}/lib/library 
     GIT_REPOSITORY https://github.com/vendor/library 
     GIT_TAG master 
     UPDATE_COMMAND "" 
     INSTALL_COMMAND "" 
     ) 

link_directories(${my-project_SOURCE_DIR}/lib/library/src/library-build/src) 

add_subdirectory(src) 

およびSrc/CMakeLists.txt:

include_directories(../lib/library/src/library/include) 

add_executable(my-project 
     main.cpp 
     ) 

add_dependencies(my-project library) 

target_link_libraries(my-project liblibrary.a) 

それはGitリポジトリからライブラリを引き出し、何の問題もなく、初めてそれを構築します。

ライブラリのソースコードを編集し、ライブラリ.aファイルを自動的に再コンパイルしたいと考えています。私はそれを達成する最もクリーンな方法は何ですか?現在、ライブラリの.aファイルがあるため、ソースコードの更新はすべて無視されます。

私は私のメインCMakeLists.txtに

add_subdirectory(lib/library/src/library/src) 

を追加しようとすると、私は次のエラーを取得する:LIB /ライブラリ/ SRC /ライブラリ/ SRC/CMakeLists.txtで

CMakeのエラー: 55(add_library):add_libraryは、同じ名前の別のターゲットがすでに存在するため、ターゲット "library"を作成できません。既存のターゲットは、ソースディレクトリ "/ cygdrive/c/Code/my-project"で作成されたカスタムターゲットです。詳細については、ポリシーCMP0002の文書を参照してください。

私はそれは、ライブラリCMakeLists.txtで

add_library(gram STATIC ${SOURCE_FILES}) 

を呼び出すし、プロジェクトCMakeLists.txtで

ExternalProject_Add(library ...) 

を呼び出すことによって引き起こされていますね。

アイデア? ExternalProject_Addを使用するためのあなたの主な目標は設定して、それを構築することなく、外部ソースから依存関係をダウンロードすることであるとして

+0

他のライブラリ( 'add_subdirectory()')または 'ExternalProject_add()'を含めてください。エラーメッセージは、理解するのが簡単です。 –

+0

ご覧のとおり、私はすでに 'ExternalProject_add()'を使っていますが、望み通りに動作していません。 'add_subdirectory()'のみでは、CVSからライブラリをクローンしません。 –

答えて

0

、あなたはCMAKE_COMMANDCONFIGURE_COMMANDBUILD_COMMANDとして空の文字列を定義することができます。 UPDATE_COMMANDINSTALL_COMMANDの場合と同じです。そうすれば、ExternalProject_Addはリポジトリを1回だけクローンします。

名前の衝突を克服するには、ExternalProject_Addの最初の引数に別のものを使用してください。 library_src

ExternalProject_Add(library_src 
    PREFIX ${my-project_SOURCE_DIR}/lib/library 
    GIT_REPOSITORY https://github.com/vendor/library 
    GIT_TAG master 
    UPDATE_COMMAND "" 
    CONFIGURE_COMMAND "" 
    CMAKE_COMMAND "" 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
) 
ExternalProject_Get_Property(library_src SOURCE_DIR) 
add_subdirectory(${SOURCE_DIR}) 

2番目のコマンド(ExternalProject_Get_Property)があなたに与えられた外部プロジェクトの名前付きプロパティを提供します。出力変数はプロパティと同じ名前です。そうすれば、実際のソースツリーを配置するExternalProject_Addの動作の変化に対して免除されます。

関連する問題