2016-10-21 11 views
1

他のプロジェクトが私たちのプロジェクトで配布している共有ライブラリとのリンクを容易にしようとしています。私がEXPORT機構を利用しようとすると、CMakeは、エクスポート・セットに共有ライブラリを構築するために使用された静的ライブラリを含めていないと言っています。他のプロジェクトは共有ライブラリとリンクするだけでよく、静的ライブラリを本当にインストールする必要はないので、これは私には不要です。これはthis bugと非常によく似ているようですが、私はこのすべての仕組みを誤解しているかもしれません。なぜCMake EXPORTは共有ライブラリの構築に使用される静的ライブラリを必要としますか?

CMake Error: install(EXPORT "myExport" ...) includes target "mySharedLib" 
which requires target "myStaticLib" that is not in the export set. 

答えて

1

あなたがやったようにtarget_link_librariesを使用して、ライブラリの依存関係はデフォルトで推移している次のエラーメッセージになり

CMAKE_MINIMUM_REQUIRED(VERSION 3.2.1) 
PROJECT(ExportTest) 

ADD_LIBRARY(myStaticLib STATIC staticLib.c) 
ADD_LIBRARY(mySharedLib SHARED sharedLib.c) 
TARGET_LINK_LIBRARIES(mySharedLib myStaticLib) 

INSTALL(TARGETS mySharedLib EXPORT myExport DESTINATION lib) 
INSTALL(EXPORT myExport DESTINATION include) 

:ここでは、最小限の例です。試してください:

target_link_libraries(mySharedLib PRIVATE myStaticLib) 
+0

ありがとう、それはエラーを解決します。静的ライブラリを共有ライブラリの依存性とみなしたい理由を理解できたら助かりますか?これは奇妙なデフォルト動作のようです。 – rpmcnally

+0

'target_link_libraries'はリンケージの依存関係だけでなく、インクルードのための依存関係も管理します。静的ライブラリをリンクすることは、共有ライブラリに静的インタフェースのヘッダを含まないことを意味します。 cmakeの開発者は、依存性を制御するための明示的な署名を提供しながら、この時点で不自然であることを選択しました – wasthishelpful

関連する問題