Spec-Zone.ru › CMake

CMAKE_INSTALL_EXPORTS_AS_PACKAGE_INFO

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

Примечание

Эта переменная имеет значение только при включенной экспериментальной поддержке с помощью шлюза CMAKE_EXPERIMENTAL_FIXME.

Список директив, указывающих CMake установить сведения о пакете Common Package Specification при установке сведений об экспортируемых целях с помощью install(EXPORT). Значение рассматривается как список, где каждая директива имеет следующий вид:

<export-name>:<package-name>[/[l][a<appendix-name>][/<destination>]]

Для разделения различных компонентов директивы используются косые черты.

Обратите внимание, что эта возможность предназначена для распространителей пакетов и должна использоваться только в тех случаях, когда редактирование сценария CMake проекта невозможно. Разработчикам следует напрямую использовать install(PACKAGE_INFO).

Кроме того, поскольку CMAKE_INSTALL_EXPORTS_AS_PACKAGE_INFO работает, эмулируя вызов install(PACKAGE_INFO), его использование с проектом, который уже напрямую вызывает install(PACKAGE_INFO), может привести к конфликтующим директивам установки, что обычно вызывает сбой этапа конфигурирования проекта.

Значения имеют следующий смысл:

<export-name>

Имя экспорта, для которого следует установить сведения о пакете.

<package-name>

Имя пакета, для которого нужно создать сведения о пакете. Это также имя, которое пользователи будут указывать в вызове find_package().

l

Необязательно. Указывает, что имя файла со сведениями о пакете на диске должно быть в нижнем регистре. См. параметр LOWER_CASE_FILE команды install(PACKAGE_INFO).

a<appendix-name>

Необязательно. Указывает, что вместо корневого описания пакета следует создать приложение <appendix-name>. См. параметр APPENDIX команды install(PACKAGE_INFO). Обратите внимание, что в приложения нельзя добавлять дополнительные сведения (см. ниже).

<destination>

Необязательно. Указывает каталог назначения для установки файла со сведениями о пакете. См. параметр DESTINATION команды install(PACKAGE_INFO). Обратите внимание, что по умолчанию используется зависящий от платформы каталог, подходящий в большинстве случаев для файлов Common Package Specification, а не DESTINATION команды install(EXPORT), которой соответствует директива.

Для корневых описаний CMake также выводит дополнительные сведения из нескольких переменных CMake вида <export-name>_EXPORT_PACKAGE_INFO_<var>. Их значения предварительно обрабатываются так же, как при использовании string(CONFIGURE) с параметром @ONLY. Эти переменные необязательны, а их действие эквивалентно передаче их значений в параметр <var> команды install(PACKAGE_INFO).

Дополнительные переменные:

  • <export-name>_EXPORT_PACKAGE_INFO_VERSION
  • <export-name>_EXPORT_PACKAGE_INFO_COMPAT_VERSION
  • <export-name>_EXPORT_PACKAGE_INFO_VERSION_SCHEMA
  • <export-name>_EXPORT_PACKAGE_INFO_LICENSE
  • <export-name>_EXPORT_PACKAGE_INFO_DEFAULT_LICENSE
  • <export-name>_EXPORT_PACKAGE_INFO_DEFAULT_CONFIGURATIONS

В идеале версию следует задавать как @PROJECT_VERSION@. Однако некоторые проекты могут не использовать параметр VERSION команды project().

Пример

Рассмотрим следующий (упрощенный) проект:

project(Example VERSION 1.2.3 SPDX_LICENSE "BSD-3-Clause")

add_library(foo ...)
add_library(bar ...)

install(TARGETS foo EXPORT required-targets)
install(TARGETS bar EXPORT optional-targets)

install(EXPORT required-targets FILE example-targets.cmake ...)
install(EXPORT optional-targets FILE example-optional-targets.cmake ...)

В этом примере предположим, что example-targets.cmake — это файл, который устанавливается всегда, а example-optional-targets.cmake — файл, который устанавливается по желанию (например, распространяется в составе отдельного пакета, зависящего от базового пакета).

Теперь представим, что мы — распространитель и хотим предоставить пользователям файлы сведений о пакетах Common Package Specification, но не хотим изменять файлы сборки проекта. Для этого можно передать CMake следующие аргументы:

-DCMAKE_EXPERIMENTAL_FIXME=<elided>
-DCMAKE_INSTALL_EXPORTS_AS_PACKAGE_INFO=\
  required-targets:Example/l;\
  optional-targets:Example/laoptional
-Drequired-targets_EXPORT_PACKAGE_INFO_VERSION=@Example_VERSION@
-Drequired-targets_EXPORT_PACKAGE_INFO_LICENSE=@Example_SPDX_LICENSE@

(Пробелы и символы продолжения строки, добавленные для удобства чтения, следует удалить при реальном использовании. Возможно, аргументы потребуется заключить в кавычки, чтобы оболочка командной строки не интерпретировала их повторно.)

В результате CMake также создаст и установит файлы example.cps и example-optional.cps, описывающие пакет Example. Если проект не предоставляет сведения о версии и лицензии с помощью команды project(), их также можно указать с помощью подстановок, предоставляемых системой сборки пакетов (например, rpm или dpkg).

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_EXPORTS_AS_PACKAGE_INFO.html

Spec-Zone.ru

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