MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
CMake - pkg-configのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
CMake - pkg-config
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <code>find_package</code>コマンドは、特定の名前のCMakeスクリプトを検索して、該当のスクリプトを実行するコマンドである。<br> <br> 対象となるCMakeスクリプトは、その役割に応じて、ModuleとConfigの2種類に分類される。<br> <code>find_package</code>コマンドは、Module --> Configの順で検索を行う。<br> <br> 具体的な動作は以下の通りである。<br> * Module<br><u><パッケージ名>.cmake</u>ファイル、または、<u>Find<パッケージ名>.cmake</u>ファイルを検索する。 ** CMakeキャッシュ変数である変数<code>CMAKE_MODULE_PATH</code>で指定されたパス ** CMakeにデフォルトで付いてくるモジュールの配置ディレクトリ (/usr/local/share/cmake/Modulesディレクトリ等) *: <br> * Config<br><u><パッケージ名>Config.cmake</u>ファイル、または、<u><パッケージ名(小文字)>-config.cmake</u>ファイルを検索する。 ** CMake変数<code><パッケージ名>_DIR</code>で指定されたパス ** CMakeキャッシュ変数である変数<code><パッケージ名>_ROOT</code>で指定されたパス ** 環境変数<code><パッケージ名>_ROOT</code>で指定されたパス ** CMakeキャッシュ変数である変数<code>CMAKE_PREFIX_PATH</code>、変数<code>CMAKE_FRAMEWORK_PATH</code>、変数<code>CMAKE_APPBUNDLE_PATH</code>で指定されたパス ** 環境変数<code><パッケージ名>_DIR</code>、環境変数<code>CMAKE_PREFIX_PATH</code>、環境変数<code>CMAKE_FRAMEWORK_PATH</code>、環境変数<code>CMAKE_APPBUNDLE_PATH</code>で指定されたパス ** 環境変数<code>PATH</code>で指定されたパス (binディレクトリおよびsbinディレクトリで終わるディレクトリの場合は、その親ディレクトリに読み替える) ** その他 <br> なお、コマンド終了時において、CMake変数<code><パッケージ名>_FOUND</code>に<code>0</code>または<code>1</code>(<code>FALSE</code>または<code>TRUE</code>)が格納されるため、<br> 正常に検索できたかどうかを条件分岐として記述することもできる。<br> <br><br> == Module (CMakeスクリプト) == Moduleは、以下の2種類に分類される。<br> * Utility Modules *: よく使用するCMake関数をまとめたもの。 *: 例えば、CheckLanguage.cmake(あるプログラミング言語の開発ツールがインストールされているか確認するための機能をまとめたもの)等がある。 *: Utility ModulesのCMakeスクリプトを読み込む時、<code>check_language</code>コマンド、<code>get_bundle_main_executable</code>コマンド等の関数が定義されるため、 *: それらを呼び出すことで機能を使用することができる。 *: <br> * Find Modules *: 外部ライブラリの情報を収集するものであり、ファイル名はFind<パッケージ名>.cmakeファイルである。 *: 例えば、C++で記述された外部ライブラリをリンクする場合、ヘッダファイルのディレクトリ、ライブラリファイルのディレクトリ、ライブラリファイル名の3つの情報が必要になる。 *: これらの情報を自動的に収集するものがFind Modulesである。 *: <br> *: CMakeでは、Boost、BLAS、GLEW、OpenGL、X11、Qt4等のライブラリのFind Modulesがデフォルトで用意されている。 *: <br> *: ほとんどのFind Modulesは、以下に示すようなCMake変数に値が自動的に代入される。 *:* 変数<code><パッケージ名>_INCLUDE_DIRS</code> *:*: インクルードディレクトリのパス *:* 変数<code><パッケージ名>_LIBRARY_DIRS</code> *:*: ライブラリファイルがあるディレクトリのパス *:* 変数<code><パッケージ名>_LIBRARIES</code> *:*: ライブラリファイル名のリスト *:* 変数<code><パッケージ名>_DEFINITIONS</code> *:*: コンパイル時の<code>definition</code>フラグ *: <br> *: <code>find_package</code>コマンドを使用することにより、上記の変数は自動的に代入されるため、その変数を<code>target_include_directories</code>コマンド等に設定を記述する。 *: ただし、上記の変数名は必ずしもこの通りになっているわけではないため、ライブラリの情報を変数にまとめるのではなくターゲット(ライブラリ)を作成してそのプロパティにまとめる場合もある。 *: そのため、各ライブラリのFind Modulesを確認することが必要である。 <br> CMakeでは、初期状態でいくつかのModuleがインストールされている。<br> <br> Moduleの一覧は、[https://cmake.org/cmake/help/latest/manual/cmake-modules.7.html CMakeの公式Webサイト]から確認することができる。<br> <br> また、Moduleが存在しないライブラリでは、開発者がModuleを作成することもできる。<br> <br><br> == Config (CMakeスクリプト) == Configファイルは、CMakeプロジェクトをビルドしてライブラリをインストールした時に生成される設定ファイルである。<br> ファイル名は、<code><パッケージ名>Config.cmake</code>ファイル、または、<code><パッケージ名(小文字)>-config.cmake</code>ファイルである。<br> <br> ライブラリ情報を提供する点ではFindモジュールと同様であるが、Configファイルはライブラリの開発元が直接提供している設定ファイルである。<br> ライブラリをインストールした時、cmakeディレクトリやshareディレクトリの中に含まれていることが多い。<br> <br> Findモジュールと同様、多くのConfigファイルは以下に示すようなCMake変数が存在する。<br> また、これらの情報を1つのターゲットにまとめている場合もある。<br> * 変数<code><パッケージ名>_INCLUDE_DIRS</code> *: インクルードディレクトリのパス * 変数<code><パッケージ名>_LIBRARY_DIRS</code> *: ライブラリファイルがあるディレクトリのパス * 変数<code><パッケージ名>_LIBRARIES</code> *: ライブラリファイル名のリスト * 変数<code><パッケージ名>_DEFINITIONS</code> *: コンパイル時の<code>definition</code>フラグ <br> <u>Configファイルを使用する場合、開発元が公開しているドキュメントやConfigファイルの内容から、各変数名や各ターゲット名を確認する必要がある。</u><br> <br> Linuxにおいて、Configファイルの場所は以下に示すようなディレクトリに配置される。<br> また、初期設定より、/usr/binディレクトリは環境変数<code>PATH</code>に設定されているため、CMakeは自動的にConfigファイルを見つけることができる。<br> * /usr/lib64/cmake/<パッケージ名> * /usr/share/cmake/<パッケージ名> <br> したがって、Linuxでは、パッケージ管理システムからインストールしたライブラリは、<code>find_package</code>コマンドで見つけることができる。<br> もし、ライブラリにConfigファイルが付属していない場合、開発者自身でFindモジュールを作成する必要がある。<br> <br> <u>また、他の場所にライブラリをインストールしている場合は、CMakeキャッシュ変数<code><パッケージ名>_DIR</code>にライブラリのパスを設定することにより、Configファイルを見つけることができる。</u><br> <br><br> == find_packageコマンド == ==== find_packageコマンドとは ==== <code>find_package</code>コマンドは、外部パッケージの設定を検索して、それをプロジェクトに取り込むために使用する。<br> 一般的に、ライブラリのヘッダファイルやリンクするためのライブラリファイルの位置を特定する。<br> <br> このコマンドは、CMakeモジュールやパッケージ構成ファイルを利用して動作する。<br> <br> ==== 基本構文 ==== <syntaxhighlight lang="cmake"> find_package(<パッケージ名> <バージョン (省略可能)> REQUIRED <コンポーネント名 (省略可能)>) </syntaxhighlight> <br> * パッケージ名 *: 検索するパッケージの名前 * バージョン *: 必要なパッケージのバージョン (省略可能) * REQUIRED *: パッケージが見つからない場合にエラーを発生させる。 * コンポーネント名 *: 特定のコンポーネント名を指定する。 (省略可能) <br> ==== 使用例 ==== 以下の例では、<code>find_package</code>コマンドを使用して、OpenCVライブラリを検索している。<br> この例では、OpenCVが見つからない場合は、CMakeはエラーを発生させる。<br> <syntaxhighlight lang="cmake"> find_package(OpenCV REQUIRED) </syntaxhighlight> <br> ==== バージョンの指定 ==== 特定のバージョンのパッケージが必要な場合、バージョンを指定することができる。<br> 以下の例では、バージョン 4.5以上のOpenCVが必要である。<br> <syntaxhighlight lang="cmake"> find_package(OpenCV 4.5 REQUIRED) </syntaxhighlight> <br> ==== コンポーネントの指定 ==== パッケージが複数のコンポーネントを提供している場合、必要なコンポーネントを指定することができる。<br> 以下の例では、OpenCVのcoreとimgprocコンポーネントを必要とする。<br> <syntaxhighlight lang="cmake"> find_package(OpenCV REQUIRED core imgproc) </syntaxhighlight> <br> ==== 検出結果の使用 ==== <code>find_package</code>コマンドが成功した場合は、一般的に、CMake変数が設定される。<br> 例えば、OpenCVの場合、CMake変数OpenCV_INCLUDE_DIRSやOpenCV_LIBS等の変数が設定される。<br> <br> * OpenCV_INCLUDE_DIRS *: OpenCVのヘッダファイルのディレクトリ * OpenCV_LIBS *: OpenCVのリンクするライブラリ <syntaxhighlight lang="cmake"> target_include_directories(<ターゲット名> PRIVATE ${OpenCV_INCLUDE_DIRS} ) target_link_libraries(<ターゲット名> PRIVATE ${OpenCV_LIBS} ) </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]]
CMake - pkg-config
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse