Spec-Zone.ru › CMake 3.16

FindPkgConfig

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

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

PKG_CONFIG_FOUND

если исполняемый файл pkg-config был найден

PKG_CONFIG_EXECUTABLE

путь к программе pkg-config

PKG_CONFIG_VERSION_STRING

версия pkg-config (начиная с CMake 2.8.8)

pkg_check_modules

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

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

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

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

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

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

Каждый <moduleSpec> может быть либо именем модуля без модификаторов версии, либо именем модуля с ограничениями на версию (опертаторы =, <, >, <= и >= поддерживаются). Ниже приведены примеры для модуля с именем foo с различными ограничениями:

  • foo соответствует любой версии.
  • foo<2 соответствует только версиям до 2.
  • foo>=3.1 соответствует любой версии 3.1 или выше.
  • foo=1.2.3 требует, чтобы foo был версии ровно 1.2.3.

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

<XXX>_FOUND

устанавливается в 1, если модуль(и) существуют

<XXX>_LIBRARIES

только библиотеки (без «-l»)

<XXX>_LINK_LIBRARIES

библиотеки и их абсолютные пути

<XXX>_LIBRARY_DIRS

пути к библиотекам (без «-L»)

<XXX>_LDFLAGS

все необходимые флаги линковщика

<XXX>_LDFLAGS_OTHER

все остальные флаги линковщика

<XXX>_INCLUDE_DIRS

флаги препроцессора «-I» (без «-I»)

<XXX>_CFLAGS

все необходимые флаги компилятора

<XXX>_CFLAGS_OTHER

другие флаги компилятора

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

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

<YYY>_VERSION

версия модуля

<YYY>_PREFIX

каталог с префиксом модуля

<YYY>_INCLUDEDIR

каталог с заголовочными файлами модуля

<YYY>_LIBDIR

каталог с библиотеками модуля

Примеры:

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 [GLOBAL]]
                  <moduleSpec> [<moduleSpec>...])

Если модуль найден, переменная <prefix>_MODULE_NAME будет содержать имя соответствующего модуля. Эта переменная может использоваться, если вам нужно запустить pkg_get_variable().

Пример:

pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2)
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_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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.16/module/FindPkgConfig.html

Spec-Zone.ru

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