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значение, то пути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().Каждый
<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>_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.11/module/FindPkgConfig.html