2016-04-15 30 views
3

boost-buildビルドシステムをcmakeに移行しようとしています。CMAKE:依存関係の依存関係を自動的に追加します

boost-buildが持つ特徴の1つは、依存関係の依存関係を自動的にリンクすることです。例えば

ブースト・ビルド:

私は実行可能appを構築しています。それはlib2には依存関係

lib lib1 
: [ glob *.cpp ] 
; 

両方lib1lib2が静的​​LIBSされていないlib1

lib lib2 
: [ glob *.cpp ] 
    /proj/lib1//lib1 
; 

lib1に依存して、順番にlib2

exe app 
: [ glob *.cpp ] 
    /proj/lib2//lib2 
; 

に依存します。 target_link_librariesディレクティブの作品に両方lib1lib2を述べ

明示的:それはlib2.alib1.a

cmakeのに依存していることを知っているので

ブーストビルドが自動的にappためのリンカーラインにlib1.aを追加します:

lib1:

add_library(lib1 STATIC ${SOURCES}) 

LIB2:

add_library(lib2 STATIC ${SOURCES}) 

アプリ:

add_executable(app ${SOURCES}) 
target_link_libraries(app lib1 lib2) 

ライブラリの数は、これが面倒になり成長するにつれて。

target_link_libraries(app lib1 lib2 lib3 lib4 lib5 lib6 lib7 lib8 lib9 ... libN) 

質問:

  • lib2lib2に引っ張ってappを伝える方法はありますし、何lib2が依存lib1
  • に依存していることを指定する方法はありますか?
+0

をご覧になることをお勧めします:http://stackoverflow.com/questions/32756195/recursive-list-of-link-libraries-in-cmake –

+1

@TomaszLewowskiこれははるかに優れたものです:[setting- dependency-between-libraries-cmake](http://stackoverflow.com/questions/7970071/setting-dependencies-between-libraries-cmake) –

答えて

3

は、それは追加するのと同じくらい簡単ですtarget_link_libraries

LIB1 lib2へ:

add_library(lib1 STATIC ${SOURCES}) 

LIB2:

add_library(lib2 STATIC ${SOURCES}) 
target_link_libraries(lib2 lib1) 

アプリ:

add_executable(app ${SOURCES}) 
target_link_libraries(app lib2) 
+1

このアプローチは、特定のリンカーツールチェーンでの順序依存性の頭痛からもあなたを救うことに注意してください。 'gcc'のリンカは、これに関して非常にうんざりです。静的ライブラリのフラット化されたリストで引数を正しく指定しないと、リンクを拒否します。ここでのようなライブラリの依存関係をモデリングすることによって、CMakeはあなたのためにそれをすべて理解することができます。 – ComicSansMS

関連する問題