5

私が取り組んでいるプロジェクトには、次の構造があります。

---Library1
------build
------include
------src
------CMakeLists.txt
---Library2
------build
------include
------src
------CMakeLists.txt
---Executable1
------build
------include
------src
------CMakeLists.txt

Library1私が開発中のライブラリLibrary2で、サードパーティのライブラリとリンクする必要があります。をビルドするときLibrary1、自動的にビルドLibrary2してリンクする必要があります。Executable1をビルドしてリンクする必要がありLibrary1ます。Cmake の使い方がわからないので、誰かが私を正しい方向に導くことができるかどうか疑問に思っていました。add_dependenciesコマンドを使用する必要があるかもしれadd_subdirectoryませんが、それらを使用してライブラリにリンクされていることを確認する方法がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

6

ここでの最良のコマンドは、add_subdirectory(ご想像のとおり) とtarget_link_libraries.

あなたのディレクトリ構造では、ルートに「最上位」の CMakeLists.txt が表示されると思います。その CMake ファイルでは、add_subdirectory.

Library1との両方Library2が実際の CMake ターゲットであり、 経由で含まれてadd_libraryいると思いますadd_executable(Executable1 ...)。この場合、以下を Library1/CMakeLists.txt に追加できます。

target_link_libraries(Library1 Library2)

CMake は、依存関係として指定されるLibrary2たびに自動的にリンクするようになりました。Library1が変更された場合Library2、再度リンクされる前に自動的に再構築されますLibrary1

同様に、 Executable1/CMakeLists.txt で次のことができます。

target_link_libraries(Executable1 Library1)

おそらくここで注意すべき唯一のことは、add_subdirectoryコマンドの順序を次のようにする必要があるということです。

add_subdirectory(Library2)
add_subdirectory(Library1)
add_subdirectory(Executable1)

呼び出しで参照されるに依存関係が定義されるようにしtarget_link_librariesます。

私にとって奇妙に思える最後の点は、ターゲットごとにビルド ディレクトリがあることです。通常、ビルド ディレクトリは 1 つだけ必要です (できればソース ツリーの外部)。

于 2013-05-24T00:28:33.177 に答える