web-dev-qa-db-ja.com

CMakeでターゲット間の依存関係を正しく作成するにはどうすればよいですか?

CMakeを使用して、C++プロジェクトとそれが使用するライブラリ間の単純な依存関係を設定しようとしています。

設定は次のとおりです

  • 事業
    • 依存

プロジェクト自体には、Dependencyからのヘッダーを含むソースファイルが含まれており、実行可能ファイルをビルドするときに、Dependencyの静的ライブラリにリンクする必要があります。

これまでのところ、これを機能させることができますが、Dependencyの_CMakeLists.txt_ファイルでProjectのインクルードディレクトリを手動で指定する必要があります。これを自動的に引き出したいので、find_package()コマンドを使用して成功を制限し、さらに複雑にするオプションを検討しました。

私がやりたいのは、Dependencyの前にProjectを構築し、ライブラリに対するProjectリンクを作成し、そのインクルードディレクトリを作成することだけです。これを達成する簡単で簡潔な方法はありますか?

私の現在のCMakeファイル:

Project、ファイル_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)
_
30
radman

CMake 2.8.11を使用できますtarget_include_directories。単にDEPENDENCYプロジェクトにこの関数を追加し、メインプロジェクトに表示するインクルードディレクトリに入力するだけです。 CMakeは残りを気にします。

プロジェクト、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)

依存関係、CMakeLists.txt

project (Dependency)
add_library (Dependency SomethingToCompile.cpp)
target_include_directories (Dependency PUBLIC include)
22
dipp

何をしたいのか、なぜProjectとDepencyを別々にビルドする必要があるのか​​は明確ではありません。

あなたの例では私の最初は

  1. プロジェクトでは、CMakeLists.txt

    • Add_dependencies(Project Dependency)を削除します。依存関係を指定する必要はありません。target_link_libraries()は既に指定しています。
  2. DEPENDENCYでは、CMakeLists.txt

    • プロジェクトを削除(依存関係)ライブラリをビルドします。なぜ独自のプロジェクトを持っているのですか?
    • Target_link_libraries(Dependency)を削除します
0