2011-02-05 64 views
24

CMakeを使用して、C++プロジェクトとそれが使用するライブラリ間の単純な依存関係を設定しようとしています。以下のように設定CMakeターゲット間の依存関係を正しく作成する方法

がある

  • プロジェクト
    • 依存

プロジェクト自体が依存関係からヘッダを含めるソースファイルが含まれており、実行可能ファイルが構築されているときにする必要があります依存関係の静的ライブラリとリンクする。

これまでのところ私はこれを行うことができますが、プロジェクトのCMakeListsファイルに依存関係のインクルードディレクトリを手動で指定する必要があります。私はこれを自動的に引き出したいので、find_package()コマンドを使用して成功を収め、作業をもっと複雑にするオプションを探求しました。

私がしたいことは、プロジェクトの前にビルドされた依存関係を持ち、ライブラリに対してプロジェクトリンクを持ち、インクルードディレクトリを持っていることです。これを達成する簡単な簡潔な方法はありますか?

私の現在のcmakeのファイル:

プロジェクト、CMakeLists.txt:

cmake_minimum_required (VERSION 2.6) 
project (Project) 
include_directories ("${PROJECT_SOURCE_DIR}/Project") 
add_subdirectory (Dependency) 
add_executable (Project main.cpp) 
target_link_libraries (Project Dependency) 
add_dependencies(Project Dependency) 

DEPENDENCY、CMakeLists.txt

project(Dependency) 
add_library(Dependency SomethingToCompile.cpp) 
target_link_libraries(Dependency) 
+0

チェックアウト:http://stackoverflow.com/questions/10004134/cmake-add-dependency-not-in-subdirectory –

答えて

1

あなたが何をしたいのか、正確には明らかではない、となぜProjectとDepencyを別々にビルドしなければならないのか。

マイあなたの例でいえ最初はCMakeLists.txtのプロジェクトで

  1. 、だろう

    • 外し、target_link_librariesを依存関係を指定する必要はありません add_dependencies(プロジェクトの依存関係)()は、すでにそうです。依存関係では
  2. 、CMakeLists.txt

    • 削除プロジェクト(依存) これは、ライブラリーを構築し、なぜ自分のプロジェクトを持っていますか?
    • それはあなたがtarget_include_directoriesを使用することができ、何もCMake 2.8.11以来
+6

あなたの質問に答えるために。依存関係は、gitサブモジュールとして含まれる共有ライブラリのプロジェクトです。共有ライブラリは外部プロジェクトなしでも動作するようになっています。 – Arne

16

もしませんのでtarget_link_libraries(依存) を削除します。 DEPENDENCYプロジェクトにこの機能を追加して、メインプロジェクトに表示するインクルードディレクトリを入力してください。 CMakeは残りを気にします。

PROJECT、CMakeLists。TXT:

cmake_minimum_required (VERSION 2.8.11) 
project (Project) 
include_directories (Project) 
add_subdirectory (Dependency) 
add_executable (Project main.cpp) 
target_link_libraries (Project Dependency) 

DEPENDENCY、CMakeLists.txt

project (Dependency) 
add_library (Dependency SomethingToCompile.cpp) 
target_include_directories (Dependency PUBLIC include) 
関連する問題