Spec-Zone.ru › CMake 3.31

cmake_pkg_config

Добавлена в версии 3.31.

  • Синопсис
  • Введение
  • Подписи

Обработка файлов пакетов в формате pkg-config.

Синопсис

cmake_pkg_config(EXTRACT <package> [<version>] [...])

Введение

Эта команда генерирует переменные и цели CMake из файлов пакетов в формате pkg-config напрямую, без необходимости вызова или даже наличия реализации pkg-config. <package> — это либо абсолютный путь к файлу пакета, либо имя пакета, которое будет найдено с использованием стандартных шаблонов поиска pkg-config. Необязательная строка <version> имеет тот же формат и семантику, что и спецификатор версии в стиле pkg-config, за исключением того, что если оператор сравнения не указан, подразумевается =.

Существует несколько подписей для этой команды, и некоторые из параметров общие для них. Это:

EXACT / QUIET / REQUIRED

Параметр EXACT запрашивает точное совпадение строки версии (включая пустую строку, если версия не указана), перезаписывая стандартный алгоритм сравнения версий pkg-config. Это проигнорирует любой оператор сравнения, присоединённый к строке версии.

Параметр QUIET отключает информационные сообщения, включая те, которые указывают, что пакет не найден, если он не REQUIRED. Параметр REQUIRED останавливает обработку с сообщением об ошибке, если пакет не найден.

STRICTNESS <mode>

Указывает, насколько строго содержимое файлов пакета будет проверяться во время разбора и разрешения. Некорректный файл в соответствии с указанным режимом строгости приведёт к завершению команды с ошибкой. Возможные режимы:

  • STRICT: Тесно соответствует поведению исходного FDO pkg-config. Переменные и ключевые слова должны быть уникальными. Переменные должны быть определены до использования. Ключевые слова Name, Description и Version должны быть присутствовать. Общая структура файла должна быть корректной и разборчивой.
  • PERMISSIVE: Тесно соответствует поведению реализации pkgconf. Повторяющиеся переменные перезаписываются. Повторяющиеся ключевые слова добавляются. Неопределённые переменные разрешаются как пустые строки. Ключевые слова Name, Description и Version должны быть присутствовать. Общая структура файла должна быть корректной и разборчивой.
  • BEST_EFFORT: Поведение аналогично PERMISSIVE, в отношении дублирующих или неинициализированных переменных и ключевых слов, но не завершается с ошибкой ни при каких условиях. Файлы пакетов, требующие BEST_EFFORT, не пройдут валидацию в других основных реализациях и должны быть исправлены.

По умолчанию строгость — PERMISSIVE.

ENV_MODE

Указывает, какие переменные среды будут запрошены при выполнении данной команды. Возможные режимы:

  • FDO: Запрашивает только исходный набор PKG_CONFIG_* переменных среды, используемых реализацией freedesktop.org pkg-config.
  • PKGCONF: Запрашивает более расширенный набор переменных среды, используемых реализацией pkgconf.
  • IGNORE: Полностью игнорирует наличие, отсутствие и значение переменных среды. Во всех случаях, если переменная среды будет запрошена, она рассматривается как определённая, но со значением пустой строки для целей операции. Это не изменяет текущую среду. Для булевых переменных среды, таких как PKG_CONFIG_ALLOW_*, это означает, что они оцениваются как истинные.

    PKG_CONFIG_SYSROOT_PATH является незначительным исключением. Когда используется ENV_MODE IGNORE, по умолчанию не происходит добавления корневого пути и pc_sysrootdir остаётся по умолчанию /.

Подкоманды генерации целей всегда игнорируют переменные среды, отфильтровывающие флаги. Режим среды по умолчанию — PKGCONF.

PC_LIBDIR <path>...

Переопределяет стандартное местоположение для файлов пакетов; также используется для вывода переменной пакета pc_path.

Если этот параметр не задан, по умолчанию директория библиотек — это первый доступный из следующих значений:

  1. CMAKE_PKG_CONFIG_PC_LIB_DIRS
  2. Переменная среды PKG_CONFIG_LIBDIR
  3. Результат pkg-config --variable pc_path pkg-config
  4. Платформенно-зависимое значение по умолчанию
PC_PATH <path>...

Переопределяет дополнительные каталоги файлов пакетов, которые будут добавлены в путь поиска; также используется для вывода переменной пакета pc_path.

Если этот параметр не задан, по умолчанию пути — это первый доступный из следующих значений:

  1. CMAKE_PKG_CONFIG_PC_PATH
  2. Переменная среды PKG_CONFIG_PATH
  3. Пустой список
DISABLE_UNINSTALLED <bool>

Переопределяет поведение поиска файлов "неустановленных" пакетов. Это файлы пакетов с суффиксом "-uninstalled", описывающие пакеты, интегрированные напрямую из дерева сборки.

Обычно такие файлы пакетов имеют более высокий приоритет, чем "установленные" пакеты. Если DISABLE_UNINSTALLED равно true, поиск "неустановленных" пакетов отключён.

Если этот параметр не задан, поведение поиска по умолчанию определяется первым доступным из следующих значений:

  1. CMAKE_PKG_CONFIG_DISABLE_UNINSTALLED
  2. Если переменная среды PKG_CONFIG_DISABLE_UNINSTALLED определена, поиск отключён, в противном случае — включён.
PC_SYSROOT_DIR <path>

Переопределяет корневой путь, который будет добавлен к путям, указанным флагами компиляции -I и расположениями поиска библиотек -L ; также используется для вывода переменной пакета pc_sysrootdir.

Если этот параметр не задан, корневой путь по умолчанию предоставляется первым доступным из следующих значений:

  1. CMAKE_PKG_CONFIG_SYSROOT_DIR
  2. Переменная среды PKG_CONFIG_SYSROOT_DIR
  3. Если корневой путь недоступен, к путям include и library не будет добавлено ничего, и pc_sysrootdir будет установлено в /
TOP_BUILD_DIR <path>

Переопределяет путь верхнего каталога сборки, используемый для вывода переменной пакета pc_top_builddir.

Если этот параметр не задан, путь верхнего каталога сборки по умолчанию — это первый доступный из следующих значений:

  1. CMAKE_PKG_CONFIG_TOP_BUILD_DIR
  2. Переменная среды PKG_CONFIG_TOP_BUILD_DIR
  3. Если путь верхнего каталога сборки недоступен, переменная пакета pc_top_builddir не устанавливается

Подписи

cmake_pkg_config(EXTRACT <package> [<version>] [...])

Извлечь содержимое пакета в переменные.

cmake_pkg_config(EXTRACT <package> [<version>]
                [REQUIRED] [EXACT] [QUIET]
                [STRICTNESS <mode>]
                [ENV_MODE <mode>]
                [PC_LIBDIR <path>...]
                [PC_PATH <path>...]
                [DISABLE_UNINSTALLED <bool>]
                [PC_SYSROOT_DIR <path>]
                [TOP_BUILD_DIR <path>]
                [SYSTEM_INCLUDE_DIRS <path>...]
                [SYSTEM_LIBRARY_DIRS <path>...]
                [ALLOW_SYSTEM_INCLUDES <bool>]
                [ALLOW_SYSTEM_LIBS <bool>])

Следующие переменные будут заполнены из содержимого файла пакета:

Переменная

Тип

Определение

CMAKE_PKG_CONFIG_NAME

Строка

Значение ключевого слова Name

CMAKE_PKG_CONFIG_DESCRIPTION

Строка

Значение ключевого слова Description

CMAKE_PKG_CONFIG_VERSION

Строка

Значение ключевого слова Version

CMAKE_PKG_CONFIG_PROVIDES

Список

Значение ключевого слова Provides

CMAKE_PKG_CONFIG_REQUIRES

Список

Значение ключевого слова Requires

CMAKE_PKG_CONFIG_CONFLICTS

Список

Значение ключевого слова Conflicts

CMAKE_PKG_CONFIG_CFLAGS

Строка

Значение ключевого слова CFlags / Cflags

CMAKE_PKG_CONFIG_INCLUDES

Список

Все флаги с префиксом -I из CMAKE_PKG_CONFIG_CFLAGS

CMAKE_PKG_CONFIG_COMPILE_OPTIONS

Список

Все флаги без префикса -I из CMAKE_PKG_CONFIG_CFLAGS

CMAKE_PKG_CONFIG_LIBS

Строка

Значение ключевого слова Libs

CMAKE_PKG_CONFIG_LIBDIRS

Список

Все флаги с префиксом -L из CMAKE_PKG_CONFIG_LIBS

CMAKE_PKG_CONFIG_LIBNAMES

Список

Все флаги с префиксом -l из CMAKE_PKG_CONFIG_LIBS

CMAKE_PKG_CONFIG_LINK_OPTIONS

Список

Все флаги без префиксов -L или -l из CMAKE_PKG_CONFIG_LIBS

CMAKE_PKG_CONFIG_*_PRIVATE

*

CFLAGS / LIBS / REQUIRES и производные, но в их форматах с суффиксом .private

SYSTEM_INCLUDE_DIRS

Переопределяет каталоги "системы" для целей изменения флагов каталогов включения в CMAKE_PKG_CONFIG_CFLAGS и производных переменных.

Если этот параметр не указан, стандартные каталоги предоставляются первым доступным из следующих значений:

  1. CMAKE_PKG_CONFIG_SYS_INCLUDE_DIRS
  2. Переменная среды PKG_CONFIG_SYSTEM_INCLUDE_PATH
  3. Результат выполнения pkgconf --variable pc_system_includedirs pkg-config
  4. Платформенно-зависимое значение по умолчанию

Кроме того, когда ENV_MODE имеет значение PKGCONF, переменная CMAKE_PKG_CONFIG_PKGCONF_INCLUDES будет добавленна в список, если доступна. Если она недоступна, будут запрошены и добавлены в список следующие переменные среды:

  • CPATH
  • C_INCLUDE_PATH
  • CPLUS_INCLUDE_PATH
  • OBJC_INCLUDE_PATH
  • INCLUDE (только Windows)
SYSTEM_LIBRARY_DIRS

Переопределяет каталоги "системы" для целей изменения флагов каталогов библиотек в CMAKE_PKG_CONFIG_LIBS и производных переменных.

Если этот параметр не указан, стандартные каталоги предоставляются первым доступным из следующих значений:

  1. CMAKE_PKG_CONFIG_SYS_LIB_DIRS
  2. Переменная среды PKG_CONFIG_SYSTEM_LIBRARY_PATH
  3. Результат выполнения pkgconf --variable pc_system_libdirs pkg-config
  4. Платформенно-зависимое значение по умолчанию

Кроме того, когда ENV_MODE имеет значение PKGCONF, переменная CMAKE_PKG_CONFIG_PKGCONF_LIB_DIRS будет добавленна в список, если доступна. Если она недоступна, будет запрошена и добавленна переменная среды LIBRARY_PATH.

ALLOW_SYSTEM_INCLUDES

Сохраняет каталоги "системы" при изменении флагов каталогов включения в CMAKE_PKG_CONFIG_CFLAGS и производных переменных.

Если этот параметр не указан, значение по умолчанию определяется первым доступным из следующих значений:

  1. CMAKE_PKG_CONFIG_ALLOW_SYS_INCLUDES
  2. Если переменная среды PKG_CONFIG_ALLOW_SYSTEM_CFLAGS определена, флаги сохраняются, в противном случае они отфильтровываются при изменении флагов.
ALLOW_SYSTEM_LIBS

Сохраняет каталоги "системы" при изменении флагов каталогов библиотек в CMAKE_PKG_CONFIG_LIBS и производных переменных.

Если этот параметр не указан, значение по умолчанию определяется первым доступным из следующих значений:

  1. CMAKE_PKG_CONFIG_ALLOW_SYS_LIBS
  2. Если переменная среды PKG_CONFIG_ALLOW_SYSTEM_LIBS определена, флаги сохраняются, в противном случае они отфильтровываются при изменении флагов.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/command/cmake_pkg_config.html

Spec-Zone.ru

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