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>...])Пример:
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.15/module/FindPkgConfig.html