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})