1. ホーム
  2. c++

[解決済み】CMakeのinclude_directoriesとtarget_include_directoriesの違いは何ですか?

2022-04-17 14:41:09

質問

私は、C++のコードのために、次のようなディレクトリ構造を持っています。

|
|->include
|->src

私は自分のコードのためにCMakeLists.txtファイルを書いています。私は、以下の違いを理解したいと思います。 include_directoriestarget_include_directoriesCMake .

また、インクルードファイルのパスを追加する場合、どちらを使用すればよいのでしょうか?

どのように解決するのですか?

include_directories(x/y) はディレクトリスコープに影響します。この CMakeList 内のすべてのターゲット、およびその呼び出しの時点以降に追加されたすべてのサブディレクトリ内のターゲットは、パスが x/y がインクルードパスに追加されます。

target_include_directories(t x/y) にはターゲットスコープがあり x/y をターゲットとするインクルードパスに追加します。 t .

すべてのターゲットが問題のインクルードディレクトリを使用する場合、前者が必要です。後者は、パスがターゲットに固有のものである場合、あるいはパスの可視性をより細かく制御したい場合に必要です。後者は target_include_directories() がサポートしているのは PRIVATE , PUBLIC および INTERFACE の修飾子があります。