2017-06-10 28 views
0

ここでは少し似た質問がありましたが、Transitive target_include_directories on OBJECT librariesですが、実際の解決策はありませんでした。推移的依存関係とOBJECTライブラリ

add_library(a OBJECT ${a_srcs}) 
add_library(b OBJECT ${b_srcs}) 

を次のように私は私がそれらを構築することができますプロジェクトAに依存プロジェクトBを持っている場合、私は私にそれらを使用してexcutableを構築したい場合は、私は

add_executable(p ${p_srcs} $<TARGET_OBJECTS:b> $<TARGET_OBJECTS:a>) 

を書くことができますにされています$<TARGET_OBJECTS:a>を指定する必要はありません。私はこれが何らかの形でCMakeに依存性があることを伝えることを意味すると仮定します。私はOBJECTのものではなく、共有ライブラリを構築した場合、Bのプロジェクトは、この依存関係を作成します

target_link_libraries(b a) 

が含まれているだろうが、私は、オブジェクトライブラリのためのいくつかの同等の方法を見つけることができません。

答えて

1

私が理解している限り、現在の設定では、です。ターゲットpためadd_executable

  1. 一部ライブラリ(共有または静的)に対するリンク、または
  2. のいずれかは、それ自体にオブジェクトソースをマージすることができます。

(2)を選択しました。私がここで見る唯一の他の選択肢は、abに完全なライブラリ(すでに見ている可能性が高いUsage section at the bottomを参照)にマージする3番目のライブラリcを作成することです。

これを実行すると、target_link_libraries(c)になります。コンパイルされたOBJECTは、それ自身でリンクすることはできません。ソースを使用するには、ソースを実行可能ファイルまたはライブラリにマージする必要があります。

あなたadd_executable呼び出しは(以前に行われている)は、基本的にadd_executable(p ${p_srcs} ${a_srcs} ${b_srcs})をやって考え、唯一の代わりa_srcsb_srcsをコンパイルすることができ、だけではなく、作業のやり直しのコンパイルされたオブジェクトにコピーします。それは本当に簡単な説明ですが、それは一般的な考え方です。

関連する問題