13,007
回編集
404行目: | 404行目: | ||
== find_packageコマンド == | == find_packageコマンド == | ||
==== find_packageコマンドとは ==== | |||
<code>find_package</code>コマンドは、特定の名前のCMakeスクリプトを検索して、該当のスクリプトを実行するコマンドである。<br> | <code>find_package</code>コマンドは、特定の名前のCMakeスクリプトを検索して、該当のスクリプトを実行するコマンドである。<br> | ||
<br> | <br> | ||
425行目: | 426行目: | ||
なお、コマンド終了時において、CMake変数<code><パッケージ名>_FOUND</code>に<code>0</code>または<code>1</code>(<code>FALSE</code>または<code>TRUE</code>)が格納されるため、<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> | |||
Moduleの一覧は、[https://cmake.org/cmake/help/latest/manual/cmake-modules.7.html CMakeの公式Webサイト]から確認することができる。<br> | |||
<br> | |||
また、開発者がModuleを作成することもできる。<br> | |||
<br> | <br> | ||
==== Config (CMakeスクリプト) ==== | ==== Config (CMakeスクリプト) ==== | ||
435行目: | 470行目: | ||
Findモジュールと同様、多くのConfigファイルは以下に示すようなCMake変数が存在する。<br> | Findモジュールと同様、多くのConfigファイルは以下に示すようなCMake変数が存在する。<br> | ||
また、これらの情報を1つのターゲットにまとめている場合もある。<br> | また、これらの情報を1つのターゲットにまとめている場合もある。<br> | ||
* <パッケージ名>_INCLUDE_DIRS | * 変数<code><パッケージ名>_INCLUDE_DIRS</code> | ||
*: インクルードディレクトリのパス | *: インクルードディレクトリのパス | ||
* <パッケージ名>_LIBRARY_DIRS | * 変数<code><パッケージ名>_LIBRARY_DIRS</code> | ||
*: ライブラリファイルがあるディレクトリのパス | *: ライブラリファイルがあるディレクトリのパス | ||
* <パッケージ名>_LIBRARIES | * 変数<code><パッケージ名>_LIBRARIES</code> | ||
*: ライブラリファイル名のリスト | *: ライブラリファイル名のリスト | ||
* <パッケージ名>_DEFINITIONS | * 変数<code><パッケージ名>_DEFINITIONS</code> | ||
*: コンパイル時の<code>definition</code>フラグ | *: コンパイル時の<code>definition</code>フラグ | ||
<br> | <br> | ||
455行目: | 490行目: | ||
<br> | <br> | ||
<u>また、他の場所にライブラリをインストールしている場合は、CMakeキャッシュ変数<code><パッケージ名>_DIR</code>にライブラリのパスを設定することにより、Configファイルを見つけることができる。</u><br> | <u>また、他の場所にライブラリをインストールしている場合は、CMakeキャッシュ変数<code><パッケージ名>_DIR</code>にライブラリのパスを設定することにより、Configファイルを見つけることができる。</u><br> | ||
<br> | |||
== CMakeとqmakeの特徴 == | == CMakeとqmakeの特徴 == |