Spec-Zone.ru › CMake 3.12

FindPkgConfig

A pkg-config модуль для CMake.

Находит исполняемый файл pkg-config и добавляет команды pkg_get_variable(), pkg_check_modules() и pkg_search_module(). Также будут установлены следующие переменные:

PKG_CONFIG_FOUND          ... if pkg-config executable was found
PKG_CONFIG_EXECUTABLE     ... pathname of the pkg-config program
PKG_CONFIG_VERSION_STRING ... the version of the pkg-config program found
                              (since CMake 2.8.8)
pkg_get_variable

Извлекает значение переменной pkg-config varName и сохраняет его в переменную результата resultVar в области вызова.

pkg_get_variable(<resultVar> <moduleName> <varName>)

Если pkg-config возвращает несколько значений для указанной переменной, resultVar будет содержать ;-список.

Например:

pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
pkg_check_modules

Проверяет наличие всех указанных модулей, устанавливая различные переменные результата в области вызова.

pkg_check_modules(<prefix>
                  [REQUIRED] [QUIET]
                  [NO_CMAKE_PATH]
                  [NO_CMAKE_ENVIRONMENT_PATH]
                  [IMPORTED_TARGET]
                  <moduleSpec> [<moduleSpec>...])

Если задан аргумент REQUIRED, команда завершится ошибкой, если модуль(и) не найден(ы).

Если задан аргумент QUIET, сообщения об успехе/ошибке не будут выведены.

По умолчанию, если CMAKE_MINIMUM_REQUIRED_VERSION имеет значение 3.1 или выше, или если PKG_CONFIG_USE_CMAKE_PREFIX_PATH установлено в логическое True значение, то к пути поиска pkg-config будут добавлены кэши и переменные среды CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH и CMAKE_APPBUNDLE_PATH. Аргументы NO_CMAKE_PATH и NO_CMAKE_ENVIRONMENT_PATH отключают это поведение для переменных кэша и переменных среды соответственно.

Аргумент IMPORTED_TARGET создаст импортированный целевой объект с именем PkgConfig::<prefix>, который можно передать напрямую в качестве аргумента команде target_link_libraries().

Каждый <moduleSpec> должен иметь один из следующих форматов:

{moduleName}            ... matches any version
{moduleName}>={version} ... at least version <version> is required
{moduleName}={version}  ... exactly version <version> is required
{moduleName}<={version} ... modules must not be newer than <version>

При возвращении могут быть установлены следующие переменные. Существуют два набора значений, один для общего случая (<XXX> = <prefix>) и другой для информации, которую pkg-config предоставляет, когда она вызывается с опцией --static (<XXX> = <prefix>_STATIC):

<XXX>_FOUND          ... set to 1 if module(s) exist
<XXX>_LIBRARIES      ... only the libraries (without the '-l')
<XXX>_LINK_LIBRARIES ... the libraries and their absolute paths
<XXX>_LIBRARY_DIRS   ... the paths of the libraries (without the '-L')
<XXX>_LDFLAGS        ... all required linker flags
<XXX>_LDFLAGS_OTHER  ... all other linker flags
<XXX>_INCLUDE_DIRS   ... the '-I' preprocessor flags (without the '-I')
<XXX>_CFLAGS         ... all required cflags
<XXX>_CFLAGS_OTHER   ... the other compiler flags

Все, кроме <XXX>_FOUND, могут быть ;-списком, если соответствующая переменная, возвращённая из pkg-config, имеет несколько значений.

Есть некоторые специальные переменные, префикс которых зависит от количества <moduleSpec>. Если указан только один <moduleSpec>, то <YYY> будет просто <prefix>, но если задано два или более <moduleSpec> элемента, то <YYY> будет <prefix>_<moduleName>:

<YYY>_VERSION    ... version of the module
<YYY>_PREFIX     ... prefix directory of the module
<YYY>_INCLUDEDIR ... include directory of the module
<YYY>_LIBDIR     ... lib directory of the module

Примеры

pkg_check_modules (GLIB2 glib-2.0)

Ищет любую версию glib2. Если найдена, переменная результата GLIB2_VERSION будет содержать фактически найденную версию.

pkg_check_modules (GLIB2 glib-2.0>=2.10)

Ищет версию glib2 не ниже 2.10. Если найдена, переменная результата GLIB2_VERSION будет содержать фактически найденную версию.

pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0)

Ищет как glib2-2.0 (не ниже 2.10), так и любую версию gtk2+-2.0. Только если оба модуля найдены, FOO считается найденным. Переменные FOO_glib-2.0_VERSION и FOO_gtk+-2.0_VERSION будут содержать найденные версии соответствующих модулей.

pkg_check_modules (XRENDER REQUIRED xrender)

Требует любую версию xrender. Пример выходных переменных, установленных при успешном вызове:

XRENDER_LIBRARIES=Xrender;X11
XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp
pkg_search_module

Поведение этой команды аналогично pkg_check_modules(), за исключением того, что вместо проверки всех указанных модулей она ищет только первый успешный результат.

pkg_search_module(<prefix>
                  [REQUIRED] [QUIET]
                  [NO_CMAKE_PATH]
                  [NO_CMAKE_ENVIRONMENT_PATH]
                  [IMPORTED_TARGET]
                  <moduleSpec> [<moduleSpec>...])

Примеры

pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)

Переменные, влияющие на поведение

PKG_CONFIG_EXECUTABLE

Это можно установить в путь к исполняемому файлу pkg-config. Если не указано, он будет установлен модулем в результате вызова find_program() внутри. Переменная среды PKG_CONFIG может использоваться как подсказка.

PKG_CONFIG_USE_CMAKE_PREFIX_PATH

Определяет, следует ли pkg_check_modules() и pkg_search_module() добавлять пути из кэша CMAKE_PREFIX_PATH, CMAKE_FRAMEWORK_PATH и CMAKE_APPBUNDLE_PATH и переменных окружения в путь поиска pkg-config.

Если эта переменная не установлена, данное поведение включено по умолчанию, если CMAKE_MINIMUM_REQUIRED_VERSION равно 3.1 или выше, и отключено в противном случае.

© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.12/module/FindPkgConfig.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API