[解決済み] CMake target_include_directories スコープの意味
質問
というキーワードは何を意味するのでしょうか?
PUBLIC
,
PRIVATE
そして
INTERFACE
に関連する CMake の
target_include_directories
?
どのように解決するのですか?
これらのキーワードは、以下のことを伝えるために使用されます。 いつ に、ターゲットに渡すインクルードディレクトリのリストが必要であることを伝えます。によって のとき によって、それらのインクルードディレクトリが必要であるかどうかを意味します。
- そのターゲット自体をコンパイルするため。
- そのターゲットに依存する他のターゲットをコンパイルする(そのパブリックヘッダを使用するなど)。
- 上記の両方の状況において。
CMake がターゲットをコンパイルするとき、ターゲット
INCLUDE_DIRECTORIES
,
COMPILE_DEFINITIONS
そして
COMPILE_OPTIONS
のプロパティを使用します。を使用する場合
PRIVATE
キーワードを
target_include_directories()
と同様に、CMake にこれらのターゲットプロパティを入力するように指示します。
CMake がターゲット A と別のターゲット B の間の依存関係を検出したとき(たとえば
target_link_libraries(A B)
コマンドを使用した場合など)、CMake はターゲット A とターゲット B の間の依存関係を過渡的に伝播し
B
使用条件
を
A
ターゲットに追加します。それらの
ターゲットの使用条件
に依存するターゲットが必要とするインクルードディレクトリやコンパイル定義などです。
B
に依存するターゲットが満たさなければならないものです。これらは
INTERFACE_*
バージョンのプロパティで指定されます (例えば
INTERFACE_INCLUDE_DIRECTORIES
のような)、そして、入力されるのは
INTERFACE
を呼び出す際に
target_*()
コマンドを呼び出すときに使用します。
は
PUBLIC
というキーワードは、おおよそ
PRIVATE + INTERFACE
.
したがって、ライブラリを作成するとします
A
を作成し、Boostヘッダを使用するとします。あなたはそうするでしょう。
-
target_include_directories(A PRIVATE ${Boost_INCLUDE_DIRS})
もし、ソースファイル内でこれらの Boost ヘッダのみを使用するのであれば (.cpp
) やプライベートヘッダーファイル (.h
). -
target_include_directories(A INTERFACE ${Boost_INCLUDE_DIRS})
もし、ソースファイルの中で Boost ヘッダを使用しないのであれば (つまり、コンパイル時にA
). これについては、実際には実例が思いつきません。 -
target_include_directories(A PUBLIC ${Boost_INCLUDE_DIRS})
の一部に BOTH で含まれているパブリックヘッダーファイルで、 これらの Boost ヘッダーを使用した場合。A
のソースファイルに両方含まれ、また他のクライアントにも含まれるかもしれません。A
ライブラリの他のクライアントにも含まれるかもしれません。
CMake 3.0 のドキュメントに詳細があります。 ビルド仕様と使用要件 プロパティがあります。
関連
-
[解決済み] CMAKE_SOURCE_DIRはどこですか?
-
[解決済み] CMakeのオプション()をコマンドラインで設定する方法
-
[解決済み] CMakeにおけるデバッグとリリースの比較
-
[解決済み] CMakeの出力をクリアするための'cmake clean'コマンドを探しています。
-
[解決済み] MakefileとCMakeを使ったコンパイルの違いについて
-
[解決済み] configure --prefix=DIR && make all install ' と同等のCMakeは何ですか?
-
[解決済み】CMakeでC++ 11を有効にするには?
-
[解決済み】変数を設定・使用するCMakeの構文とは?
-
[解決済み】CMakeのinclude_directoriesとtarget_include_directoriesの違いは何ですか?
-
[解決済み] CMake target_link_libraries インターフェース依存性
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】CMakeでソースディレクトリからバイナリディレクトリにファイルをコピーする
-
[解決済み] CMakeは "make uninstall "をサポートしていますか?
-
[解決済み] CMake の add_definitions が動作しないようです。
-
[解決済み] CMake でモジュールディレクトリが見つからない
-
[解決済み] CMakeのオプション()をコマンドラインで設定する方法
-
[解決済み] .cmakeファイルの目的は何ですか?
-
[解決済み】CMake:スクリプト内のアクセス可能なすべての変数を出力する
-
[解決済み】変数を設定・使用するCMakeの構文とは?
-
[解決済み】CMakeのinclude_directoriesとtarget_include_directoriesの違いは何ですか?
-
[解決済み] CMake target_link_libraries インターフェース依存性