Spec-Zone.ru › CMake 3.15

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

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

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 цель.

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

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

Для обеспечения совместимости пакетов с политиками организации файловой системы распределения, если проектам необходимо указать 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 будет установлена в <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, или используя встроенное значение по умолчанию, если эта переменная не определена. Подробную информацию о поддерживаемых типах файлов и соответствующих переменных и встроенных значениях по умолчанию см. в таблице ниже.

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, или используя встроенное значение по умолчанию, если эта переменная не определена. В таблице ниже приведены поддерживаемые типы файлов и соответствующие переменные и встроенные значения по умолчанию.

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.15/command/install.html

Spec-Zone.ru

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