メインアプリケーションのINTERFACE_INCLUDE_DIRECTORIESをライブラリ(プラグイン)ターゲットにロードするにはどうすればよいですか?私はライブラリのINTERFACE_INCLUDE_DIRECTORIESをロードする方法を知っていますが、ライブラリをリンクせずにロードする方法はわかりません。CMake:メインアプリケーションのインターフェイスクラスを別のcmakeターゲットにロードするには?
├── app
├── pluga
└── plugb
メインアプリケーションのINTERFACE_INCLUDE_DIRECTORIESをライブラリ(プラグイン)ターゲットにロードするにはどうすればよいですか?私はライブラリのINTERFACE_INCLUDE_DIRECTORIESをロードする方法を知っていますが、ライブラリをリンクせずにロードする方法はわかりません。CMake:メインアプリケーションのインターフェイスクラスを別のcmakeターゲットにロードするには?
├── app
├── pluga
└── plugb
target_include_directories()
コマンドはPUBLIC
とINTERFACE
キーワードに指定された値でINTERFACE_INCLUDE_DIRECTORIES
に移入されます。
ターゲットは、ターゲットのヘッダーに対してコンパイルするために必要なインクルードディレクトリを公開するために、このプロパティを設定できます。消費ターゲットは、$<TARGET_PROPERTY:foo,INTERFACE_INCLUDE_DIRECTORIES>
などの独自のINCLUDE_DIRECTORIES
プロパティにエントリを追加して、fooのインタフェースで指定されたインクルードディレクトリを使用することができます。
だから、答えは使用することです:
target_include_directories(pluga INTERFACE
$<TARGET_PROPERTY:app,INTERFACE_INCLUDE_DIRECTORIES>
)
リンクは、あるターゲットから別のターゲットにプロパティを自動的に伝播する唯一の方法です。 * header-only *ライブラリ( 'add_library(... INTERFACE)')を作成し、そのINTERFACE_INCLUDE_DIRECTORIESプロパティを設定し、アプリケーションとプラグインの両方をリンクすることができます。 – Tsyvarev