Spec-Zone.ru › CMake 3.22

FindPkgConfig

Модуль pkg-config для CMake.

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

PKG_CONFIG_FOUND

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

PKG_CONFIG_VERSION_STRING

Новая в версии 2.8.8.

Версия найденного pkg-config.

PKG_CONFIG_EXECUTABLE

Путь к исполняемому файлу pkg-config.

PKG_CONFIG_ARGN

Новая в версии 3.22.

Список аргументов для передачи в pkg-config.

И PKG_CONFIG_EXECUTABLE, и PKG_CONFIG_ARGN инициализируются модулем, но могут быть переопределены пользователем. См. Переменные, влияющие на поведение для информации об инициализации этих переменных.

pkg_check_modules

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

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

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

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

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

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

Новая в версии 3.13: Аргумент GLOBAL сделает импортированный целевой объект доступным в глобальной области видимости.

Новая в версии 3.15: Небиблиотечные параметры компоновщика, возвращаемые pkg-config, сохраняются в свойстве целевого объекта INTERFACE_LINK_OPTIONS.

Изменено в версии 3.18: Директории заголовков, указанные с помощью -isystem, сохраняются в свойстве целевого объекта INTERFACE_INCLUDE_DIRECTORIES. В предыдущих версиях CMake они хранились в свойстве INTERFACE_COMPILE_OPTIONS.

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

  • foo соответствует любой версии.
  • foo<2 соответствует версиям до 2.
  • foo>=3.1 соответствует версиям 3.1 или более поздним.
  • foo=1.2.3 требует именно версии 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, могут быть списками ;-list, если соответствующая переменная, возвращенная pkg-config, имеет несколько значений.

Изменено в версии 3.18: Директории заголовков, указанные с помощью -isystem, сохраняются в переменной <XXX>_INCLUDE_DIRS. В предыдущих версиях CMake они хранились в <XXX>_CFLAGS_OTHER.

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

<YYY>_VERSION

Версия модуля.

<YYY>_PREFIX

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

<YYY>_INCLUDEDIR

Директория заголовков модуля.

<YYY>_LIBDIR

Директория библиотек модуля.

Изменено в версии 3.8: Для любого данного <prefix>, pkg_check_modules() может вызываться несколько раз с различными параметрами. В предыдущих версиях CMake кешировался и возвращался первый успешный результат.

Изменено в версии 3.16: Если полный путь к найденной библиотеке определить невозможно, но она все еще видна для компоновщика, передайте её как -l<name>. В предыдущих версиях CMake в этом случае происходил сбой.

Примеры:

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>...])

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

Пример:

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

Новая в версии 3.4.

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

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

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

Например:

pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)

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

PKG_CONFIG_EXECUTABLE

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

Новая в версии 3.1: Переменная среды PKG_CONFIG может использоваться как подсказка, если PKG_CONFIG_EXECUTABLE еще не задана.

Изменено в версии 3.22: Если переменная среды PKG_CONFIG установлена, при использовании её как подсказки берется только первый аргумент.

END_OF_DOCUMENT_MARKER
PKG_CONFIG_ARGN

Новое в версии 3.22.

Эта переменная кэша может быть установлена в список аргументов, которые дополнительно нужно передать в pkg-config при необходимости. Если не указано, она будет инициализирована из переменной окружения PKG_CONFIG, если она задана. Предполагается, что первый аргумент в этой переменной окружения — это программа pkg-config, а все оставшиеся аргументы используются для инициализации PKG_CONFIG_ARGN. Если такая переменная окружения не определена, PKG_CONFIG_ARGN инициализируется пустой строкой. Модуль не обновляет переменную после её установки в кэш.

PKG_CONFIG_USE_CMAKE_PREFIX_PATH

Новое в версии 3.1.

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

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

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

Spec-Zone.ru

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