私は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依存関係。