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установлена, при использовании её как подсказки берется только первый аргумент.
-
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