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