基本コマンド include_directories()
〓〓〓〓〓〓〓〓 CMake を実践的に学ぶ〓〓〓〓〓〓〓〓〓〓
6. include_directories
6.1 コマンド形式:
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
include_directorys は、ヘッダー ファイルを含むディレクトリを指定するために使用されます。include_directories 関数を使用すると、CMakeLists.txt ファイルでプロジェクトのヘッダー ファイル ディレクトリを指定できるため、コンパイル プロセス中にディレクトリ内のヘッダー ファイルが正しく検索され、インクルードされます。
6.2 パラメータの説明
- BEFORE | AFTER : 含まれるディレクトリを追加する順序を指定するオプションのパラメーター。AFTER 修飾子を使用すると、追加されたディレクトリは既存のインクルード ディレクトリの後に配置され、BEFORE 修飾子を使用すると、追加されたディレクトリは既存のインクルード ディレクトリの前に配置されます。デフォルトでは、新しいインクルード ディレクトリは既存のディレクトリの後に配置されます。
- SYSTEM : は、含まれるディレクトリがシステムレベルのディレクトリであることを指定するために使用されるオプションの修飾子です。SYSTEM 修飾子を使用すると、コンパイラはこれらのディレクトリをシステム レベルのヘッダー ディレクトリとして扱います。つまり、コンパイラはこれらのディレクトリに関する警告メッセージを生成しません。
6.3 例
私たちのプロジェクトが「foo.h」という名前のヘッダー ファイルに依存しており、ヘッダー ファイルのパスが「/path/to/foo.h」であると仮定します。include_directories コマンドを使用して、このパスをコンパイラの検索パスに追加できます。サンプル コードは次のとおりです。
include_directories(/path/to)
これにより、コンパイラは指定されたディレクトリで「foo.h」という名前のヘッダー ファイルを検索できるようになります。
さらに、複数の検索ディレクトリを一度に追加できます。
include_directories(
directory1
directory2
directory3
...
)
この例では、include_directories コマンドを使用して、ディレクトリ directory1、directory2、および directory3 を一度に追加しました。必要に応じてディレクトリ パスをさらに追加できます。
6.4 注意事項
- include_directories コマンドは、コンパイラーがビルド プロセス中に必要なヘッダー ファイルを確実に見つけられるように、add_executable または add_library の前に使用する必要があります。
- include_directories コマンドは、ヘッダー ファイルを検索するディレクトリをコンパイラーに指示するだけであり、これらのヘッダー ファイルは自動的にインクルードされません。ヘッダー ファイルをインクルードするには、#include 前処理ディレクティブを使用してコードに明示的にヘッダー ファイルを含める必要があります。
- include_directories コマンドでは絶対パスを使用しないようにしてください。プロジェクトの移植性を高めるために、CMakeLists.txt ファイルへの相対パスを使用することをお勧めします。
- include_directories コマンドを使用する場合は、指定したディレクトリに正しいヘッダー ファイルが含まれていることを確認する必要があります。そうしないと、コンパイラが必要なヘッダー ファイルを見つけられず、コンパイル エラーが発生する可能性があります。
次の理由から、include_directories の代わりに target_include_directories を使用することをお勧めします。
-
より明示的なスコープ: include_directories コマンドはグローバルであり、グローバルに追加されたディレクトリ パスをプロジェクト全体に適用します。これにより、名前の競合や不要な検索パスが発生する可能性があります。target_include_directories コマンドは、特定のターゲット (実行可能ファイルやライブラリなど) 用であり、ディレクトリ パスを特定のターゲット範囲に制限して、より明確なスコープ制御を提供します。
-
保守性の向上: target_include_directories コマンドを使用して、ディレクトリ パスを特定のターゲットに関連付けることができます。このようにして、ターゲットが追加、変更、または削除されると、それに関連するディレクトリ パスも自動的に調整され、コードの一貫性と保守性が維持されます。include_directories コマンドを使用する場合は、ディレクトリ パスの一貫性を手動で確認する必要があるため、メンテナンス作業が複雑になります。
-
依存関係管理の向上: target_include_directories コマンドを target_link_libraries コマンドと組み合わせて使用すると、正しいヘッダー ファイルの検索パスが依存ターゲットに確実に渡されます。このようにして、ライブラリを構築するときに、ライブラリのユーザーは依存ヘッダー ファイルのパスを手動で追加する必要がなく、依存関係を自動的に通過します。これにより、プロジェクトの依存関係の管理が簡素化されます。
-
クロスプラットフォーム互換性: 場合によっては、target_include_directories コマンドを使用すると、クロスプラットフォーム互換性が向上します。たとえば、target_include_directories コマンドは、特定のプラットフォームまたはコンパイラ フラグをより適切に処理して、一部のコンパイラを使用するときやツールチェーンを構築するときに正しいヘッダー検索パスを確保できます。
添付: 一般ディレクトリに戻るためのポータルは次のとおりです。
〓〓〓〓〓〓〓〓 CMake 一般ディレクトリを実践的に学ぶ〓〓〓〓〓〓〓〓〓〓