私はCMakeを初めて使用し、に関連するPUBLIC、PRIVATE、およびINTERFACEキーワードと少し混乱していtarget_link_libraries()
ます。ドキュメントには、1つのコマンドでリンクの依存関係とリンクインターフェイスの両方を指定するために使用できると記載されています。
リンクの依存関係とリンクインターフェイスは実際にはどういう意味ですか?
私はCMakeを初めて使用し、に関連するPUBLIC、PRIVATE、およびINTERFACEキーワードと少し混乱していtarget_link_libraries()
ます。ドキュメントには、1つのコマンドでリンクの依存関係とリンクインターフェイスの両方を指定するために使用できると記載されています。
リンクの依存関係とリンクインターフェイスは実際にはどういう意味ですか?
回答:
共有ライブラリを作成していて、ソースcppファイルに別のライブラリ(たとえばQtNetwork)のヘッダーが含まれているが、ヘッダーファイルにQtNetworkヘッダーが含まれていない場合、QtNetworkはPRIVATE
依存関係になります。
ソースファイルとヘッダーに別のライブラリのヘッダーが含まれている場合、それはPUBLIC
依存関係です。
ソースファイルではなくヘッダーファイルに別のライブラリのヘッダーが含まれている場合、それはINTERFACE
依存関係です。
その他のビルドプロパティPUBLIC
とINTERFACE
依存関係は、消費ライブラリに伝播されます。http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements
PUBLIC
たりPRIVATE
重要なのですか?それは何を変えますか?
PRIVATE
しても、ライブラリにリンクしているプロジェクトに依存関係は追加されません。それはよりクリーンであり、依存関係とユーザーの間で起こりうる競合を回避します。
PUBLIC
依存関係はありません。INTERFACE
依存関係。