MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
CMake - インクルードのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
CMake - インクルード
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == CMakeにおいて、インクルードに関するコマンドには主に以下の3つがある。<br> <br> * 特定のターゲットに対してインクルードディレクトリを設定する場合 : <code>target_include_directories</code>コマンド *: ターゲットごとに異なるインクルードディレクトリを設定できるため、より細かい制御が可能である。 *: インクルードディレクトリと共に、スコープ (PRIVATE, PUBLIC, INTERFACE) を指定する。 <br> <syntaxhighlight lang="cmake"> target_include_directories(my_target PRIVATE ${CMAKE_SOURCE_DIR}/include) target_include_directories(my_target PUBLIC ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src) </syntaxhighlight> <br> * プロジェクト全体に対してインクルードディレクトリを設定する場合 : <code>include_directories</code>コマンド *: 指定されたディレクトリは、全てのターゲットに適用される。 <br> <syntaxhighlight lang="cmake"> include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/third_party) </syntaxhighlight> <br> * 別のCMakeスクリプトを読み込む場合 : <code>include</code>コマンド *: 別のCMakeスクリプトファイルを読み込むためのコマンドである。 *: インクルードディレクトリの設定とは異なり、CMake構成の再利用やモジュールの分割に使用される。 *: 指定したファイルを読み込み、その中に定義されたCMakeコマンドを実行する。 <br> <syntaxhighlight lang="cmake"> include(${CMAKE_SOURCE_DIR}/cmake/my_module.cmake) </syntaxhighlight> <br> これらのコマンドを使い分けることにより、CMakeを使用したプロジェクトの構成やビルド設定を効率的に行うことができる。<br> <br><br> == 非ターゲットのインクルード (target_include_directoriesコマンド) == <code>find_package</code>コマンドは、<code>include</code>コマンドで手動で行う設定を、<code>REQUIRED</code>オプション等を使用して自動で行うことができる。<br> <syntaxhighlight lang="cmake"> find_package(PkgConfig) </syntaxhighlight> <br> <code>find_package</code>コマンドは、<code>pkg_search_module</code>コマンドよりも柔軟でより多くのオプションが存在する。<br> また、CMakeには豊富なパッケージ定義が付属しており、パッケージ管理システムからインストールしたソフトウェアは/usr/share/cmake/Modules/Find*.cmakeファイルにある。<br> <br> <code>target_include_directories(<ターゲット名> PUBLIC ...)</code>コマンドは、<br> <ターゲット名>を使用する全てのターゲットにおいて、自動的にインクルードディレクトリが使用されるようになる。<br> <br> ただし、CMakeLists.txtファイル内のターゲットにのみ有効であり、<code>pkg_search_module</code>コマンドで取得したライブラリに対しては機能しない。<br> <syntaxhighlight lang="cmake"> # pkg-configコマンドの使用 find_package(PkgConfig REQUIRED) # pkg-configコマンドを使用してライブラリとヘッダファイルを自動的に設定 pkg_check_modules(<任意の変数名> <.pcファイル内の[Name]セクション名 例. sdl2> REQUIRED IMPORTED_TARGET) # ...略 target_link_libraries(<ターゲット名> ${<任意の変数名>_LIBRARIES} ) target_include_directories(<ターゲット名> PUBLIC ${<任意の変数名>_INCLUDE_DIRS} ) target_compile_options(<ターゲット名> PUBLIC ${<任意の変数名>_CFLAGS} # または ${<任意の変数名>_CFLAGS_OTHER} ) </syntaxhighlight> <br><br> == インクルードパスの指定 == ==== target_include_directoriesコマンド (推奨) ==== インクルードパスを指定する場合、<code>target_include_directories</code>コマンドを使用する。<br> <code>target_include_directories</code>コマンドを使用することにより、ターゲット単位でインクルードパスを適切に管理できる。<br> <br> 特定のターゲットに対してのみインクルードディレクトリを設定する場合は、<code>target_include_directories</code>コマンドを使用することを推奨する。<br> <br> * PUBLIC *: このターゲット、および、このターゲットに依存する他のターゲットでも使用する。 * PRIVATE *: このターゲットでのみ使用する。 * INTERFACE *: このターゲットには使用せず、このターゲットに依存する他のターゲットでのみ使用する。 * $<BUILD_INTERFACE:...> *: ビルド時のインクルードパス * $<INSTALL_INTERFACE:...> *: インストール後のインクルードパス * ${PROJECT_SOURCE_DIR} *: CMakeが自動的に設定する変数であり、プロジェクトのトップレベルのソースディレクトリへの絶対パスを表す。 *: CMakeプロジェクトのトップレベル (<code>project()</code>コマンドを実行したディレクトリ) の絶対パスが格納されている。 *: サブディレクトリからこの変数を参照すると、トップレベルのディレクトリパスが返される。 <syntaxhighlight lang="cmake"> # ターゲットの定義 add_library(my_library source1.cpp source2.cpp ) # ターゲットのインクルードディレクトリを指定 target_include_directories(my_library PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include> PRIVATE ${PROJECT_SOURCE_DIR}/external/lib1/include ${PROJECT_SOURCE_DIR}/external/lib2/include ) </syntaxhighlight> <br> ==== include_directoriesコマンド (非推奨) ==== <u><code>include_directories</code>コマンドの使用は避けるべきである。</u><br> <u>これは、プロジェクト全体で共通のインクルードパスを設定するため、意図しないインクルードが発生する可能性があるからである。</u><br> <br> <code>include_directories</code>コマンドは、プロジェクト内の全てのターゲットに対して指定されたディレクトリを適用する。<br> <syntaxhighlight lang="cmake"> include_directories(/path/to/include) </syntaxhighlight> <br> <code>include_directories</code>コマンドを複数使用する場合、デフォルトでは、指定したパスは最後尾となる。<br> ただし、<code>include_directories</code>コマンドに<code>BEFORE</code>オプションを付加した場合は最前となる。<br> <br> 以下の例では、"-I/path1/to/include -I/path2/to/include"となる。<br> <syntaxhighlight lang="cmake"> include_directories(/path1/to/include) include_directories(/path2/to/include) </syntaxhighlight> <br> 以下の例では、"-I/path2/to/include -I/path1/to/include" となる。<br> <syntaxhighlight lang="cmake"> include_directories(/path1/to/include) include_directories(BEFORE /path2/to/include) </syntaxhighlight> <br><br> == include(CMakePackageConfigHelpers) == このコマンドは、パッケージ設定ファイルの作成を支援するためのヘルパ関数を提供する。<br> <br> このコマンドは、CMakeのビルドプロセスをより柔軟かつ強力にするための追加機能を提供する。<br> プロジェクトの要件に応じて適切に使用することにより、より管理しやすく、他のプロジェクトとの統合も容易になる。<br> <br> 主な機能は以下の通りである。<br> * write_basic_package_version_file() *: パッケージのバージョン情報ファイルを生成する。 * configure_package_config_file() *: パッケージの設定ファイルを生成する。 <br> これらの関数を使用することにより、他のプロジェクトが<code>find_package</code>コマンドを使用して自身のプロジェクトを簡単に見つけて使用できる。<br> <br><br> == include(GenerateExportHeader) == このコマンドは、ライブラリのシンボルをエクスポートするためのヘッダファイルを自動生成する機能を提供する。<br> <br> このコマンドは、CMakeのビルドプロセスをより柔軟かつ強力にするための追加機能を提供する。<br> プロジェクトの要件に応じて適切に使用することにより、より管理しやすく、他のプロジェクトとの統合も容易になる。<br> <br> 主な用途は以下の通りである。<br> * generate_export_header() *: ライブラリのシンボルをエクスポートするマクロを含むヘッダファイルを生成する。 <br> これにより、特にWindows環境での動的ライブラリ (DLL) の作成時に必要となるシンボルのエクスポート / インポート宣言を簡単に管理できる。<br> <br><br> == include(FeatureSummary) == このコマンドは、プロジェクトの機能や依存関係の概要を表示するための関数を提供する。<br> <br> このコマンドは、CMakeのビルドプロセスをより柔軟かつ強力にするための追加機能を提供する。<br> プロジェクトの要件に応じて適切に使用することにより、より管理しやすく、他のプロジェクトとの統合も容易になる。<br> <br> 主な機能は以下の通りである。<br> * add_feature_info() *: プロジェクトの機能情報を追加する。 * set_package_properties() *: パッケージの属性を設定する。 * feature_summary() *: 追加された機能や依存関係の概要を表示する。 <br> これらの関数を使用することにより、プロジェクトの構成や必要な依存関係を簡単に把握して、ユーザに分かりやすく表示することができる。<br> <br><br> __FORCETOC__ [[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]]
CMake - インクルード
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse