|
|
226行目: |
226行目: |
| 変数<code>BUILD_SHARED_LIBS</code>を設定する方法として、<code>cmake</code>コマンドに<code>-DBUILD_SHARED_LIBS</code>オプションを付加する方法がある。<br> | | 変数<code>BUILD_SHARED_LIBS</code>を設定する方法として、<code>cmake</code>コマンドに<code>-DBUILD_SHARED_LIBS</code>オプションを付加する方法がある。<br> |
| cmake -DBUILD_SHARED_LIBS=YES /path/to/source | | cmake -DBUILD_SHARED_LIBS=YES /path/to/source |
| <br><br>
| |
|
| |
| == find_packageコマンド ==
| |
| ==== find_packageコマンドとは ====
| |
| <code>find_package</code>コマンドは、特定の名前のCMakeスクリプトを検索して、該当のスクリプトを実行するコマンドである。<br>
| |
| <br>
| |
| 対象となるCMakeスクリプトは、その役割に応じて、ModuleとConfigの2種類に分類される。<br>
| |
| <code>find_package</code>コマンドは、Module -> Configの順で検索を行う。<br>
| |
| <br>
| |
| 具体的な動作は以下のとおりです。
| |
| * Module<br><パッケージ名>.cmakeファイル、または、Find<パッケージ名>.cmakeファイルを検索する。
| |
| ** CMakeキャッシュ変数である変数<code>CMAKE_MODULE_PATH</code>で指定されたパス
| |
| ** CMakeにデフォルトで付いてくるモジュールの配置ディレクトリ (/usr/local/share/cmake/Modulesディレクトリ等)
| |
| *: <br>
| |
| * Config<br><パッケージ名>Config.cmakeファイル、または、<パッケージ名(小文字)>-config.cmakeファイルを検索する。
| |
| ** CMake変数<code><PackageName>_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>
| |
| ==== 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>
| |
|
| |
| ==== 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> | | <br><br> |
|
| |
|