Spec-Zone.ru › CMake 3.17

install

Укажите правила для выполнения во время установки.

Резюме

install(TARGETS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])

Введение

Эта команда генерирует правила установки для проекта. Правила, указанные вызовами этой команды в директории исходного кода, выполняются в порядке следования во время установки. Порядок между директориями не определён.

Для этой команды существует множество подписей. Некоторые из них определяют параметры установки для файлов и целей. Общие параметры, применимые к нескольким подписям, описаны здесь, но они действительны только для подписей, которые их указывают. Общие параметры:

DESTINATION

Укажите директорию на диске, в которую будет установлен файл. Если указан полный путь (с ведущим слэшем или буквой диска), он используется напрямую. Если указан относительный путь, он интерпретируется относительно значения переменной CMAKE_INSTALL_PREFIX. Префикс может быть перемещён во время установки с помощью механизма DESTDIR, описанного в документации переменной CMAKE_INSTALL_PREFIX.

PERMISSIONS

Укажите разрешения для установленных файлов. Действительные разрешения — OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_WRITE, GROUP_EXECUTE, WORLD_READ, WORLD_WRITE, WORLD_EXECUTE, SETUID, и SETGID. Разрешения, не имеющие смысла на определённых платформах, игнорируются на этих платформах.

CONFIGURATIONS

Укажите список конфигураций сборки, для которых применяется правило установки (Debug, Release и т. д.). Обратите внимание, что значения, указанные для этого параметра, применяются только к параметрам, перечисленным ПОСЛЕ параметра CONFIGURATIONS. Например, чтобы задать отдельные пути установки для конфигураций Debug и Release, сделайте следующее:

install(TARGETS target
        CONFIGURATIONS Debug
        RUNTIME DESTINATION Debug/bin)
install(TARGETS target
        CONFIGURATIONS Release
        RUNTIME DESTINATION Release/bin)

Обратите внимание, что CONFIGURATIONS появляется ДО RUNTIME DESTINATION.

COMPONENT

Укажите имя компонента установки, с которым связано правило установки, например, «runtime» или «development». Во время установки, специфичной для компонента, будут выполнены только правила установки, связанные с заданным именем компонента. Во время полной установки устанавливаются все компоненты, если не отмечены как EXCLUDE_FROM_ALL. Если COMPONENT не указан, создаётся компонент по умолчанию «Unspecified». Имя компонента по умолчанию может быть изменено с помощью переменной CMAKE_INSTALL_DEFAULT_COMPONENT_NAME.

EXCLUDE_FROM_ALL

Укажите, что файл исключается из полной установки и устанавливается только как часть установки, специфичной для компонента.

RENAME

Укажите имя установленного файла, которое может отличаться от исходного файла. Переименование разрешено только при установке одного файла с помощью команды.

OPTIONAL

Укажите, что не является ошибкой, если файл для установки не существует.

Подписи команд, устанавливающие файлы, могут выводить сообщения во время установки. Используйте переменную CMAKE_INSTALL_MESSAGE для управления выводом сообщений.

Многие из install() вариантов неявно создают каталоги, содержащие установленные файлы. Если CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS задан, эти каталоги будут созданы с указанными разрешениями. В противном случае они будут созданы в соответствии с правилами uname на Unix-подобных платформах. Платформы Windows не затрагиваются.

Установка целей

install(TARGETS targets... [EXPORT <export-name>]
        [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
          PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE]
         [DESTINATION <dir>]
         [PERMISSIONS permissions...]
         [CONFIGURATIONS [Debug|Release|...]]
         [COMPONENT <component>]
         [NAMELINK_COMPONENT <component>]
         [OPTIONAL] [EXCLUDE_FROM_ALL]
         [NAMELINK_ONLY|NAMELINK_SKIP]
        ] [...]
        [INCLUDES DESTINATION [<dir> ...]]
        )

Форма TARGETS определяет правила для установки целей из проекта. Существует несколько типов файлов целей, которые могут быть установлены:

ARCHIVE

Статические библиотеки обрабатываются как ARCHIVE цели, за исключением тех, которые отмечены свойством FRAMEWORK на macOS (см. FRAMEWORK ниже). Для платформ DLL (все системы на базе Windows, включая Cygwin) библиотека импорта DLL обрабатывается как ARCHIVE цель. На AIX файл импорта компоновщика, созданный для исполняемых файлов с ENABLE_EXPORTS, обрабатывается как ARCHIVE цель.

LIBRARY

Библиотеки модулей всегда обрабатываются как LIBRARY цели. Для платформ, не использующих DLL, общие библиотеки обрабатываются как LIBRARY цели, за исключением тех, которые отмечены свойством FRAMEWORK на macOS (см. FRAMEWORK ниже).

RUNTIME

Исполняемые файлы обрабатываются как RUNTIME объекты, за исключением тех, которые отмечены свойством MACOSX_BUNDLE на macOS (см. BUNDLE ниже). Для платформ DLL (все системы на базе Windows, включая Cygwin) DLL-часть общей библиотеки обрабатывается как RUNTIME цель.

OBJECTS

Библиотеки объектных файлов (простая группа объектных файлов) всегда обрабатываются как OBJECTS цели.

FRAMEWORK

Как статические, так и общие библиотеки, отмеченные свойством FRAMEWORK, обрабатываются как FRAMEWORK цели на macOS.

BUNDLE

Исполняемые файлы, отмеченные свойством MACOSX_BUNDLE, обрабатываются как BUNDLE цели на macOS.

PUBLIC_HEADER

Все файлы PUBLIC_HEADER, связанные с библиотекой, устанавливаются в назначенное место, указанное аргументом PUBLIC_HEADER на платформах, не являющихся Apple. Правила, определённые этим аргументом, игнорируются для библиотек FRAMEWORK на платформах Apple, поскольку связанные файлы устанавливаются в соответствующие места внутри папки фреймворка. Подробнее см. PUBLIC_HEADER.

PRIVATE_HEADER

Аналогично PUBLIC_HEADER, но для файлов PRIVATE_HEADER. Подробнее см. PRIVATE_HEADER.

RESOURCE

Аналогично PUBLIC_HEADER и PRIVATE_HEADER, но для файлов RESOURCE. Подробнее см. RESOURCE.

Для каждого из этих аргументов последующие аргументы применяются только к типу цели или файла, указанному в аргументе. Если ни один не указан, свойства установки применяются ко всем типам целей. Если указан только один, то будут установлены только цели этого типа (что может быть использовано для установки только DLL или только библиотеки импорта).

Для обычных исполняемых файлов, статических и общих библиотек, аргумент DESTINATION не требуется. Для этих типов целей, когда DESTINATION опущен, целевое расположение будет взято из соответствующей переменной из GNUInstallDirs, или задано значение по умолчанию, если эта переменная не определена. То же самое относится к общедоступным и закрытым заголовкам, связанным с установленным целевым объектом через свойства цели PUBLIC_HEADER и PRIVATE_HEADER. Целевое расположение всегда должно быть указано для библиотек модулей, Apple-пакетов и фреймворков. Целевое расположение может быть опущено для интерфейсных и объектных библиотек, но они обрабатываются по-другому (см. обсуждение этого вопроса в конце этого раздела).

В следующей таблице показаны типы целей с соответствующими переменными и значениями по умолчанию, которые применяются при отсутствии целевого расположения:

Тип цели

Переменная GNUInstallDirs

Значение по умолчанию

RUNTIME

${CMAKE_INSTALL_BINDIR}

bin

LIBRARY

${CMAKE_INSTALL_LIBDIR}

lib

ARCHIVE

${CMAKE_INSTALL_LIBDIR}

lib

PRIVATE_HEADER

${CMAKE_INSTALL_INCLUDEDIR}

include

PUBLIC_HEADER

${CMAKE_INSTALL_INCLUDEDIR}

include

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

END_OF_DOCUMENT_MARKER ```

Для соответствия пакетов политике расположения файлов системы дистрибуции, если проекты должны указать DESTINATION, рекомендуется использовать путь, начинающийся с соответствующей переменной GNUInstallDirs. Это позволяет разработчикам пакетов контролировать место назначения установки, устанавливая соответствующие переменные кэша. Следующий пример демонстрирует установку статической библиотеки в стандартное место назначения, предоставленное GNUInstallDirs, но с заголовками, установленными в подкаталоге, специфичном для проекта, в соответствии с вышеизложенным рекомендациям:

add_library(mylib STATIC ...)
set_target_properties(mylib PROPERTIES PUBLIC_HEADER mylib.h)
include(GNUInstallDirs)
install(TARGETS mylib
        PUBLIC_HEADER
          DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
)

В дополнение к общим опциям, перечисленным выше, каждый целевой объект может принимать следующие дополнительные аргументы:

NAMELINK_COMPONENT

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

lib<name>.so -> lib<name>.so.1

где lib<name>.so.1 — имя библиотеки, а lib<name>.so — «имя ссылки», позволяющее компоновщикам найти библиотеку при указании -l<name>. Опция NAMELINK_COMPONENT аналогична опции COMPONENT, но она изменяет компонент установки имени ссылки разделяемой библиотеки, если он генерируется. Если не указано, она по умолчанию соответствует значению COMPONENT. Использование этого параметра вне блока LIBRARY является ошибкой.

Рассмотрим следующий пример:

install(TARGETS mylib
        LIBRARY
          COMPONENT Libraries
          NAMELINK_COMPONENT Development
        PUBLIC_HEADER
          COMPONENT Development
       )

В этом случае, если вы выберете установить только компонент Development, будут установлены как заголовки, так и имя ссылки без самой библиотеки. (Если вы также не установите компонент Libraries, имя ссылки станет висящей символической ссылкой, и проекты, которые связывают с библиотекой, будут иметь ошибки компиляции.) Если вы установите только компонент Libraries, будет установлена только библиотека без заголовков и имени ссылки.

Эта опция обычно используется для систем управления пакетами, которые имеют отдельные пакеты для выполнения и разработки. Например, в системах Debian библиотека, как ожидается, находится в пакете выполнения, а заголовки и имя ссылки — в пакете разработки.

Подробную информацию о создании разделяемых библиотек с версиями см. в свойствах целевого объекта VERSION и SOVERSION.

NAMELINK_ONLY

Эта опция вызывает установку только имени ссылки, когда устанавливается целевой объект библиотеки. На платформах, где разделяемые библиотеки с версиями не имеют имён ссылок или когда библиотека не имеет версии, опция NAMELINK_ONLY ничего не устанавливает. Использование этого параметра вне блока LIBRARY является ошибкой.

При указании NAMELINK_ONLY, для указания компонента установки имени ссылки можно использовать NAMELINK_COMPONENT или COMPONENT, но COMPONENT обычно предпочтительнее.

NAMELINK_SKIP

Аналогично NAMELINK_ONLY, но оказывает обратное действие: вызывает установку файлов библиотеки, кроме имени ссылки, при установке целевого объекта библиотеки. Если не заданы ни NAMELINK_ONLY, ни NAMELINK_SKIP, устанавливаются оба компонента. На платформах, где у разделяемых библиотек с версиями нет символических ссылок или если библиотека не имеет версии, NAMELINK_SKIP устанавливает библиотеку. Использование этого параметра вне блока LIBRARY является ошибкой.

Если указано NAMELINK_SKIP, NAMELINK_COMPONENT не имеет эффекта. Не рекомендуется использовать NAMELINK_SKIP в сочетании с NAMELINK_COMPONENT.

Команда install(TARGETS) также может принимать следующие опции на верхнем уровне:

EXPORT

Эта опция связывает установленные файлы целевого объекта с экспортом, называемым <export-name>. Она должна предшествовать любым опциям целевого объекта. Для фактической установки файла экспорта вызовите install(EXPORT), документацию которого см. ниже. См. документацию свойства целевого объекта EXPORT_NAME для изменения имени экспортируемого целевого объекта.

INCLUDES DESTINATION

Этот параметр задаёт список каталогов, которые будут добавлены к свойству целевого объекта INTERFACE_INCLUDE_DIRECTORIES целевого объекта <targets> при экспорте командой install(EXPORT). Если указан относительный путь, он рассматривается как относительный к $<INSTALL_PREFIX>.

В одном вызове команды в формате TARGETS можно указать одну или несколько групп свойств. Целевой объект может быть установлен более одного раза в разных местах. Рассмотрим гипотетические целевые объекты myExe, mySharedLib, и myStaticLib. Код:

install(TARGETS myExe mySharedLib myStaticLib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/static)
install(TARGETS mySharedLib DESTINATION /some/full/path)

установит myExe в <prefix>/bin и myStaticLib в <prefix>/lib/static. На платформах без DLL mySharedLib будет установлен в <prefix>/lib и /some/full/path. На платформах DLL mySharedLib DLL будет установлен в <prefix>/bin и /some/full/path, а его библиотека импорта — в <prefix>/lib/static и /some/full/path.

Интерфейсные библиотеки могут быть указаны среди целевых объектов для установки. Они не устанавливают артефакты, но будут включены в связанный EXPORT. Если Объектные библиотеки указаны, но не задано место назначения для их объектных файлов, они будут экспортированы как Интерфейсные библиотеки. Это достаточно, чтобы удовлетворить требованиям транзитивного использования других целевых объектов, которые ссылаются на объектные библиотеки в их реализации.

Установка целевого объекта со свойством целевого объекта EXCLUDE_FROM_ALL, установленным на TRUE имеет неопределённое поведение.

install(TARGETS) может устанавливать целевые объекты, созданные в других каталогах. При использовании таких правил установки между каталогами, выполнение make install (или аналогичного) из подкаталога не гарантирует, что целевые объекты из других каталогов будут актуальны. Вы можете использовать target_link_libraries() или add_dependencies(), чтобы убедиться, что целевые объекты из других каталогов будут построены перед запуском подкаталоговых правил установки.

Место назначения установки, заданное как аргумент DESTINATION, может использовать «генераторские выражения» со синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений.

Установка файлов

install(<FILES|PROGRAMS> files...
        TYPE <type> | DESTINATION <dir>
        [PERMISSIONS permissions...]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>]
        [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])

Формат FILES задаёт правила для установки файлов для проекта. Имена файлов, заданные как относительные пути, интерпретируются относительно текущего каталога исходных файлов. Файлы, установленные с помощью этого формата, по умолчанию получают права OWNER_WRITE, OWNER_READ, GROUP_READ, и WORLD_READ если аргумент PERMISSIONS не задан.

Формат PROGRAMS идентичен формату FILES за исключением того, что права по умолчанию для устанавливаемого файла также включают OWNER_EXECUTE, GROUP_EXECUTE, и WORLD_EXECUTE. Этот формат предназначен для установки программ, которые не являются целевыми объектами, таких как сценарии оболочки. Используйте формат TARGETS для установки целевых объектов, построенных в рамках проекта.

Список files..., заданных для FILES или PROGRAMS, может использовать «генераторные выражения» со синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений. Однако, если какой-либо элемент начинается с генераторного выражения, он должен оцениваться как полный путь.

Должен быть предоставлен либо аргумент TYPE, либо DESTINATION, но не оба. Аргумент TYPE задаёт общий тип файлов, устанавливаемых. Место назначения будет устанавливаться автоматически, беря соответствующую переменную из GNUInstallDirs, или используя встроенный по умолчанию, если эта переменная не определена. См. таблицу ниже для поддерживаемых типов файлов и соответствующих переменных и встроенных значений по умолчанию. Проекты могут предоставить аргумент DESTINATION вместо типа файла, если они хотят явно определить место установки.

TYPE Аргумент

Переменная GNUInstallDirs

Встроенное значение по умолчанию

BIN

${CMAKE_INSTALL_BINDIR}

bin

SBIN

${CMAKE_INSTALL_SBINDIR}

sbin

LIB

${CMAKE_INSTALL_LIBDIR}

lib

INCLUDE

${CMAKE_INSTALL_INCLUDEDIR}

include

SYSCONF

${CMAKE_INSTALL_SYSCONFDIR}

etc

SHAREDSTATE

${CMAKE_INSTALL_SHARESTATEDIR}

com

LOCALSTATE

${CMAKE_INSTALL_LOCALSTATEDIR}

var

RUNSTATE

${CMAKE_INSTALL_RUNSTATEDIR}

<LOCALSTATE dir>/run

DATA

${CMAKE_INSTALL_DATADIR}

<DATAROOT dir>

INFO

${CMAKE_INSTALL_INFODIR}

<DATAROOT dir>/info

LOCALE

${CMAKE_INSTALL_LOCALEDIR}

<DATAROOT dir>/locale

MAN

${CMAKE_INSTALL_MANDIR}

<DATAROOT dir>/man

DOC

${CMAKE_INSTALL_DOCDIR}

<DATAROOT dir>/doc

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

Обратите внимание, что некоторые встроенные значения по умолчанию типов используют DATAROOT каталог в качестве префикса. Префикс DATAROOT вычисляется аналогично типам, с CMAKE_INSTALL_DATAROOTDIR в качестве переменной и share как встроенным значением по умолчанию. Вы не можете использовать DATAROOT в качестве параметра TYPE; используйте DATA вместо этого.

Для обеспечения соответствия пакетов политике размещения файлов системы дистрибуции, если проекты должны указать DESTINATION, рекомендуется использовать путь, начинающийся с соответствующей переменной GNUInstallDirs. Это позволяет администраторам пакетов контролировать место установки, задавая соответствующие переменные кэша. Следующий пример демонстрирует, как следовать этому совету при установке заголовков в подкаталог проекта:

include(GNUInstallDirs)
install(FILES mylib.h
        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
)

Место назначения, заданное как аргумент DESTINATION, может использовать «генераторские выражения» со синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений.

Установка каталогов

install(DIRECTORY dirs...
        TYPE <type> | DESTINATION <dir>
        [FILE_PERMISSIONS permissions...]
        [DIRECTORY_PERMISSIONS permissions...]
        [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>] [EXCLUDE_FROM_ALL]
        [FILES_MATCHING]
        [[PATTERN <pattern> | REGEX <regex>]
         [EXCLUDE] [PERMISSIONS permissions...]] [...])

Форма DIRECTORY устанавливает содержимое одного или нескольких каталогов в заданном месте назначения. Структура каталогов копируется дословно в место назначения. Последний компонент каждого имени каталога добавляется к каталогу назначения, но можно использовать конечный слеш, чтобы избежать этого, так как это оставит последний компонент пустым. Имена каталогов, заданные как относительные пути, интерпретируются относительно текущего каталога исходного кода. Если имена каталогов ввода не заданы, каталог назначения будет создан, но ничего в него не будет установлено. Опции FILE_PERMISSIONS и DIRECTORY_PERMISSIONS задают права, предоставляемые файлам и каталогам в каталоге назначения. Если USE_SOURCE_PERMISSIONS указано, а FILE_PERMISSIONS нет, права доступа к файлам будут скопированы из структуры исходного каталога. Если права не заданы, файлам будут присвоены права по умолчанию, указанные в форме команды FILES, а каталогам — права по умолчанию, указанные в форме команды PROGRAMS.

Опция MESSAGE_NEVER отключает вывод состояния установки файлов.

Установка каталогов может быть с высокой точностью управления с использованием опций PATTERN или REGEX. Эти опции «сопоставления» задают шаблон подстановки или регулярное выражение для сопоставления каталогов или файлов, встречающихся внутри каталогов ввода. Они могут быть использованы для применения определенных опций (см. ниже) к подмножеству файлов и каталогов, которые встречаются. Полный путь к каждому входному файлу или каталогу (с прямыми слешами) сравнивается с выражением. PATTERN будет соответствовать только полным именам файлов: часть полного пути, соответствующая шаблону, должна находиться в конце имени файла и предшествовать слешу. REGEX будут соответствовать любой части полного пути, но могут использовать / и $ для моделирования поведения PATTERN. По умолчанию все файлы и каталоги устанавливаются, независимо от того, соответствуют ли они. Опция FILES_MATCHING может быть задана перед первой опцией сопоставления, чтобы отключить установку файлов (но не каталогов), не соответствующих ни одному из выражений. Например, код

install(DIRECTORY src/ DESTINATION include/myproj
        FILES_MATCHING PATTERN "*.h")

извлечёт и установит заголовочные файлы из дерева исходного кода.

Некоторые опции могут следовать за выражением PATTERN или REGEX и применяться только к файлам или каталогам, соответствующим им. Опция EXCLUDE пропустит соответствующий файл или каталог. Опция PERMISSIONS переопределяет настройки прав доступа для соответствующего файла или каталога. Например, код

install(DIRECTORY icons scripts/ DESTINATION share/myproj
        PATTERN "CVS" EXCLUDE
        PATTERN "scripts/*"
        PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
                    GROUP_EXECUTE GROUP_READ)

установит каталог icons в share/myproj/icons и каталог scripts в share/myproj. Иконки получат права доступа по умолчанию, скрипты получат определенные права доступа, а любые каталоги CVS будут исключены.

Должен быть предоставлен либо TYPE, либо DESTINATION, но не оба. Аргумент TYPE указывает общий тип файла файлов в перечисленных каталогах, которые устанавливаются. Место назначения будет установлено автоматически, взяв соответствующую переменную из GNUInstallDirs, или используя встроенное значение по умолчанию, если эта переменная не определена. См. таблицу ниже для поддерживаемых типов файлов и соответствующих переменных и встроенных значений по умолчанию. Проекты могут указать аргумент DESTINATION вместо типа файла, если они хотят явно определить место установки.

TYPE Аргумент

Переменная GNUInstallDirs

Встроенное значение по умолчанию

BIN

${CMAKE_INSTALL_BINDIR}

bin

SBIN

${CMAKE_INSTALL_SBINDIR}

sbin

LIB

${CMAKE_INSTALL_LIBDIR}

lib

INCLUDE

${CMAKE_INSTALL_INCLUDEDIR}

include

SYSCONF

${CMAKE_INSTALL_SYSCONFDIR}

etc

SHAREDSTATE

${CMAKE_INSTALL_SHARESTATEDIR}

com

LOCALSTATE

${CMAKE_INSTALL_LOCALSTATEDIR}

var

RUNSTATE

${CMAKE_INSTALL_RUNSTATEDIR}

<LOCALSTATE dir>/run

DATA

${CMAKE_INSTALL_DATADIR}

<DATAROOT dir>

INFO

${CMAKE_INSTALL_INFODIR}

<DATAROOT dir>/info

LOCALE

${CMAKE_INSTALL_LOCALEDIR}

<DATAROOT dir>/locale

MAN

${CMAKE_INSTALL_MANDIR}

<DATAROOT dir>/man

DOC

${CMAKE_INSTALL_DOCDIR}

<DATAROOT dir>/doc

Обратите внимание, что некоторые встроенные значения по умолчанию типов используют DATAROOT каталог в качестве префикса. Префикс DATAROOT вычисляется аналогично типам, с CMAKE_INSTALL_DATAROOTDIR в качестве переменной и share как встроенным значением по умолчанию. Вы не можете использовать DATAROOT в качестве параметра TYPE; используйте DATA вместо этого.

Для обеспечения соответствия пакетов политике размещения файлов системы дистрибуции, если проекты должны указать DESTINATION, рекомендуется использовать путь, начинающийся с соответствующей переменной GNUInstallDirs. Это позволяет администраторам пакетов контролировать место установки, задавая соответствующие переменные кэша.

Список dirs... для DIRECTORY и место назначения, заданное как аргумент DESTINATION, могут использовать «генераторские выражения» со синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений.

Настраиваемая логика установки

install([[SCRIPT <file>] [CODE <code>]]
        [COMPONENT <component>] [EXCLUDE_FROM_ALL] [...])

Форма SCRIPT вызовет указанные файлы сценариев CMake во время установки. Если имя файла сценария является относительным путем, оно будет интерпретироваться относительно текущего каталога исходного кода. Форма CODE вызовет указанный код CMake во время установки. Код задается как единственный аргумент внутри двойных кавычек. Например, код

install(CODE "MESSAGE(\"Sample install message.\")")

выведет сообщение во время установки.

<file> или <code> могут использовать «генераторные выражения» со синтаксисом $<...> (в случае <file>, это относится к их использованию в имени файла, а не к содержимому файла). См. руководство cmake-generator-expressions(7) для доступных выражений.

Установка экспортов

install(EXPORT <export-name> DESTINATION <dir>
        [NAMESPACE <namespace>] [[FILE <name>.cmake]|
        [PERMISSIONS permissions...]
        [CONFIGURATIONS [Debug|Release|...]]
        [EXPORT_LINK_INTERFACE_LIBRARIES]
        [COMPONENT <component>]
        [EXCLUDE_FROM_ALL])
install(EXPORT_ANDROID_MK <export-name> DESTINATION <dir> [...])

Форма EXPORT генерирует и устанавливает файл CMake, содержащий код для импорта целей из дерева установки в другой проект. Установки целей связаны с экспортом <export-name> с помощью опции EXPORT в сигнатуре install(TARGETS), описанной выше. Опция NAMESPACE будет добавлять префикс <namespace> к именам целей при их записи в файл импорта. По умолчанию сгенерированный файл будет называться <export-name>.cmake, но опция FILE может быть использована для указания другого имени. Значение, заданное для опции FILE, должно быть именем файла с расширением .cmake. Если указана опция CONFIGURATIONS, то файл будет установлен только при установке одной из указанных конфигураций. Кроме того, сгенерированный файл импорта будет ссылаться только на соответствующие конфигурации целей. Ключевое слово EXPORT_LINK_INTERFACE_LIBRARIES, если оно присутствует, вызывает экспорт содержимого свойств, соответствующих (IMPORTED_)?LINK_INTERFACE_LIBRARIES(_<CONFIG>)?, при условии, что политика CMP0022 NEW.

Когда указана опция COMPONENT, указанные <component> неявно зависят от всех компонентов, упомянутых в наборе экспорта. Экспортируемый файл <name>.cmake потребует наличия каждого из экспортированных компонентов для правильной сборки зависимых проектов. Например, проект может определить компоненты Runtime и Development, где общие библиотеки находятся в компоненте Runtime, а статические библиотеки и заголовки — в компоненте Development. Набор экспорта также обычно будет частью компонента Development, но он будет экспортировать цели из компонентов Runtime и Development. Таким образом, компонент Runtime необходимо установить, если установлен компонент Development, но не наоборот. Если компонент Development был установлен без компонента Runtime, у зависимых проектов возникнут ошибки сборки. Управляющие программы пакетов, такие как APT и RPM, обычно обрабатывают это, включив компонент Runtime в качестве зависимости компонента Development в метаданных пакета, гарантируя, что библиотека всегда устанавливается, если присутствуют заголовки и файл экспорта CMake.

Помимо файлов языка cmake, режим EXPORT_ANDROID_MK может быть использован для указания экспорта для системы сборки android ndk. Этот режим принимает те же опции, что и обычный режим экспорта. Android NDK поддерживает использование предварительно скомпилированных библиотек, как статических, так и динамических. Это позволяет cmake собирать библиотеки проекта и предоставлять их системе сборки ndk с транзитивными зависимостями, флагами включения и определениями, необходимыми для использования библиотек.

Форма EXPORT полезна для использования целей, созданных и установленных текущим проектом, в других проектах. Например, код

install(TARGETS myexe EXPORT myproj DESTINATION bin)
install(EXPORT myproj NAMESPACE mp_ DESTINATION lib/myproj)
install(EXPORT_ANDROID_MK myproj DESTINATION share/ndk-modules)

установит исполняемый файл myexe в <prefix>/bin и код для его импорта в файле <prefix>/lib/myproj/myproj.cmake и <prefix>/share/ndk-modules/Android.mk. Внешний проект может загрузить этот файл с помощью команды include и обратиться к исполняемому файлу myexe из дерева установки, используя имя импортированной цели mp_myexe, как если бы эта цель была собрана в собственном дереве.

Примечание

Эта команда заменяет команду install_targets() и свойства целей PRE_INSTALL_SCRIPT и POST_INSTALL_SCRIPT. Она также заменяет формы FILES команд install_files() и install_programs(). Порядок обработки этих правил установки относительно правил, сгенерированных командами install_targets(), install_files() и install_programs(), не определен.

Сгенерированный скрипт установки

Команда install() генерирует файл cmake_install.cmake внутри каталога сборки, который используется внутренне сгенерированной целью установки и CPack. Вы также можете вызвать этот скрипт вручную с помощью cmake -P. Этот скрипт принимает несколько переменных:

COMPONENT

Установите эту переменную, чтобы установить только один компонент CPack вместо всех. Например, если вы хотите установить только компонент Development, запустите cmake -DCOMPONENT=Development -P cmake_install.cmake.

BUILD_TYPE

Установите эту переменную, чтобы изменить тип сборки, если вы используете генератор с несколькими конфигурациями. Например, чтобы установить конфигурацию Debug, запустите cmake -DBUILD_TYPE=Debug -P cmake_install.cmake.

DESTDIR

Это переменная среды, а не переменная CMake. Она позволяет изменить префикс установки в системах UNIX. Подробнее см. DESTDIR.

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

Spec-Zone.ru

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