cmake
インストールされたパッケージ、ライブラリ、プログラムの検索と使用
サーチ…
構文
- find_package(pkgname [バージョン] [EXACT] [QUIET] [REQUIRED])
- インクルード(FindPkgConfig)
- pkg_search_module(接頭辞[必須] [QUIET] pkgname [otherpkg ...])
- pkg_check_modules(接頭辞[必須] [QUIET] pkgname [otherpkg ...])
パラメーター
| パラメータ | 詳細 |
|---|---|
| バージョン(オプション) | major.minor.patch.tweakの形式で、メジャー番号とオプションでマイナー、パッチ、調整番号で定義されたパッケージの最小バージョン |
| EXACT(オプション) | versionで指定されたversionが見つかる正確なバージョンであることを指定します。 |
| 必須(オプション) | パッケージが見つからない場合は自動的にエラーをスローし、プロセスを停止します。 |
| QUIET(オプション) | この関数は、標準出力にメッセージを送信しません |
備考
find_package方法はすべてのプラットフォームで互換性がありますが、pkg-configはLinuxやOSXのようなUnixライクなプラットフォームでのみ利用できます。find_package多くのパラメータとオプションの詳細な説明は、find_package記載されています 。パッケージのバージョンなどの多くのオプションパラメータを指定することはできますが、すべてのFindモジュールがこれらのパラメータをすべて適切に使用するわけではありません。未定義の動作が発生した場合は、CMakeのインストールパスでモジュールを見つけて、その動作を修正または理解する必要があります。
find_packageとFindを使用する .cmakeモジュール
インストールされたパッケージをCMakeで見つけるためのデフォルトの方法は、 find_package関数をFind<package>.cmakeファイルとともに使用することです。このファイルの目的は、パッケージの検索ルールを定義し、 <package>_FOUND 、 <package>_INCLUDE_DIRS 、および<package>_LIBRARIESなどの異なる変数を設定することです。
多くのFind<package>.cmakeファイルは、CMakeでデフォルトで既に定義されています。ただし、必要なパッケージのファイルがない場合は、自分で作成して${CMAKE_SOURCE_DIR}/cmake/modules (またはCMAKE_MODULE_PATHが上書きされた場合は他のディレクトリ)
デフォルトモジュールのリストは、 マニュアル(v3.6)にあります。プロジェクトで使用されているCMakeのバージョンに従ってマニュアルをチェックすることが不可欠です。そうしないと、モジュールが不足している可能性があります。 cmake --help-module-listを使ってインストールされたモジュールを見つけることも可能です。
Github上のFindSDL2.cmake良い例があります
CMakeLists.txtが必要な基本的なCMakeLists.txtは次のとおりです。
cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules")
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
pkg_search_moduleとpkg_check_modulesを使用する
Unixライクなオペレーティングシステムでは、 pkg-configプログラムを使用して、 <package>.pcファイルを提供するパッケージを見つけて設定することができます。
pkg-configを使用するには、 CMakeLists.txt include(FindPkgConfig)を呼び出す必要があります。次に、2つの機能があります。
-
pkg_search_module:パッケージをチェックし、最初に利用可能なパッケージを使用します。 -
pkg_check_modulesは、対応するすべてのパッケージをチェックします。
pkg-configを使って2.0.1以上のバージョンのSDL2を見つける基本的なCMakeLists.txtは次のとおりです:
cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")
include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2>=2.0.1)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})