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