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> == set(CMAKE_INCLUDE_CURRENT_DIR ON) == CMakeのビルド設定において、<br> 現在のディレクトリ (CMakeLists.txtファイルが存在するディレクトリ) とビルドディレクトリを自動的にインクルードパスに追加するオプションである。<br> <br> <u>CMake変数<code>CMAKE_INCLUDE_CURRENT_DIR</code>をONに指定することにより、以下に示す2つのディレクトリが自動的にインクルードパスに追加される。</u><br> * 現在のソースディレクトリ (CMakeLists.txtファイルが存在するディレクトリ) の自動追加 *: 現在処理中のソースディレクトリが、インクルードパスに追加する。 * 現在のビルドディレクトリの自動追加 *: CMakeによって生成されたファイル (例: 設定ファイルや自動生成されたヘッダファイル等) が配置されるビルドディレクトリをインクルードパスに追加する。 <br> この変数を有効にする場合、以下に示すような特徴がある。<br> * 利便性の向上 *: ソースファイル内でヘッダファイルをインクルードする時に、フルパスを指定する必要がなくなる。 * 自動生成ファイルの取り扱い *: 特に、CMakeやQtのような自動生成ツールによって生成されるファイルを簡単にインクルードできるようになる。 *: そのため、開発者は明示的に<code>include_directories</code>コマンドで指定する必要がない。 * サブディレクトリへの影響 *: この設定は、現在のディレクトリとそのサブディレクトリに対して有効になる。 <br> この変数を有効にする場合、以下に示すようなメリットがある。<br> * Qtプロジェクトで、moc (Meta-Object Compiler) によって生成されたファイルを容易に見つけることができる。 * CMakeのconfigure_fileコマンドで生成されたヘッダファイルを簡単にインクルードすることができる。 <br> ただし、大規模なプロジェクトでは不要なディレクトリもインクルードパスに追加される可能性があるため、明示的にインクルードディレクトリを指定する方が管理しやすい。<br> また、同名のヘッダファイルが異なるディレクトリに存在する場合、予期せぬ衝突が発生する可能性がある。<br> <br> そのため、大規模なプロジェクトや複雑なディレクトリ構造を持つプロジェクトでは、<br> より明示的なインクルードパスの管理 (<code>target_include_directories</code>コマンドの使用等) を検討すること推奨する。<br> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]]
CMake - インクルード
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse