1

src/foo で、-lwhatever にリンクされた lib foo を作成します

add_library(foo foo.cpp) 
target_link_libraries(foo -lwhatever)

src/bar では foo を使用します

add_executable (bar bar.cpp)
target_link_libraries(bar foo)

LTO のおかげかもしれませんが、bar の target_link_libraries に -lwhatever を追加する必要があります。そうしないと、コンパイル時にシンボルが不足しています。

target_link_libraries(bar foo -lwhatever)

透明化できないの?

4

1 に答える 1

1

CMake 3.0 の時点で、CMake にはINTERFACE_LINK_FLAGSこれを可能にする target プロパティがありません。

ここでの問題はtarget_link_libraries、リンカ フラグを指定するために使用することが、そもそも最も賢明な設計上の決定ではなかったことです。の精神に基づく別のコマンドtarget_compile_optionsが望ましいでしょう。

これは CMake の見落としだと思います。関連するユースケースがある場合はtarget_link_flags、将来の CMake バージョンにコマンドを含めることについて議論できるかもしれません。これが大きな懸念事項である場合は、開発者のメーリング リストに気軽に連絡してください。

現時点での代替手段は、リンク フラグを指定するために のLINK_FLAGStarget プロパティを使用することです。foo次に、指定したポイントでそのプロパティを検査して、オプションを 2 回ハードコードする必要がないようにし、手動でプロパティbarに効果的に変換することもできます。INTERFACE_*しかし、それはそれが得るのと同じくらい良いです。

于 2014-11-12T10:33:10.087 に答える