install
Укажите правила для выполнения во время установки.
Синопсис
install(TARGETS <target>... [...])
install(IMPORTED_RUNTIME_ARTIFACTS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])
install(RUNTIME_DEPENDENCY_SET <set-name> [...]) Введение
Эта команда генерирует правила установки для проекта. Правила установки, заданные вызовами команды install() в директории исходного кода, выполняются в порядке следования во время установки.
Изменено в версии 3.14: Правила установки в поддиректориях, добавленных вызовами команды add_subdirectory(), чередуются с правилами в родительской директории для выполнения в указанном порядке (см. политику CMP0082).
Изменено в версии 3.22: Переменная среды CMAKE_INSTALL_MODE может переопределить поведение по умолчанию для копирования команды install().
Существует несколько сигнатур для этой команды. Некоторые из них определяют параметры установки для файлов и целей. Общие параметры для нескольких сигнатур описаны здесь, но они действуют только для сигнатур, которые их задают. Общие параметры:
-
DESTINATION -
Укажите директорию на диске, в которую будет установлен файл. Аргументы могут быть относительными или абсолютными путями.
Если задан относительный путь, он интерпретируется относительно значения переменной
CMAKE_INSTALL_PREFIX. Префикс может быть перемещён во время установки с помощью механизмаDESTDIR, описанного в документации переменнойCMAKE_INSTALL_PREFIX.Если задан абсолютный путь (с ведущей косой чертой или буквой диска), он используется как есть.
Поскольку абсолютные пути не поддерживаются генераторами установщиков
cpack, предпочтительно использовать относительные пути. В частности, нет необходимости делать пути абсолютными, добавляяCMAKE_INSTALL_PREFIX; этот префикс используется по умолчанию, если DESTINATION — относительный путь. -
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 -
Новое в версии 3.6.
Указывает, что файл исключён из полной установки и устанавливается только в рамках установки, специфичной для компонента.
-
RENAME -
Укажите имя устанавливаемого файла, которое может отличаться от исходного файла. Переименование разрешено только при установке одного файла командой.
-
OPTIONAL -
Указывает, что не является ошибкой, если устанавливаемый файл не существует.
Новое в версии 3.1: Сигнатуры команд, устанавливающие файлы, могут выводить сообщения во время установки. Используйте переменную CMAKE_INSTALL_MESSAGE для управления выводом сообщений.
Новое в версии 3.11: Многие из вариантов install() неявно создают директории, содержащие устанавливаемые файлы. Если CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS установлена, эти директории будут созданы с указанными правами. В противном случае они будут созданы в соответствии с правилами uname на Unix-подобных платформах. Платформы Windows не затронуты.
Установка целей
install(TARGETS targets... [EXPORT <export-name>]
[RUNTIME_DEPENDENCIES args...|RUNTIME_DEPENDENCY_SET <set-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 -
Артефакты целей этого типа включают:
-
Статические библиотеки (кроме macOS, если помечены как
FRAMEWORK, см. ниже); -
Импортные библиотеки DLL (на всех системах на базе Windows, включая Cygwin; они имеют расширение
.lib, в отличие от библиотек.dll, которые попадают вRUNTIME); - На AIX, импортный файл линковщика, созданный для исполняемых файлов с включённой
ENABLE_EXPORTS.
-
Статические библиотеки (кроме macOS, если помечены как
-
LIBRARY -
Артефакты целей этого типа включают:
-
Динамические библиотеки, за исключением
- DLL (они попадают в
RUNTIME, см. ниже), - на macOS, если помечены как
FRAMEWORK(см. ниже).
- DLL (они попадают в
-
-
RUNTIME -
Артефакты целей этого типа включают:
-
Исполняемые файлы (кроме macOS, если помечены как
MACOSX_BUNDLE, см.BUNDLEниже); - DLL (на всех системах на базе Windows, включая Cygwin; обратите внимание, что сопутствующие библиотеки импорта имеют тип
ARCHIVE).
-
Исполняемые файлы (кроме macOS, если помечены как
-
OBJECTS -
Новое в версии 3.9.
Объектные файлы, связанные с объектными библиотеками.
-
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 | Значение по умолчанию |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Проекты, желающие следовать общепринятой практике установки заголовочных файлов в подкаталог проекта, должны указать путь назначения, а не полагаться на вышеуказанное.
Для соответствия политикам структуры файловой системы дистрибутива, если проекты должны указать 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 -
Новая версия 3.12.
На некоторых платформах у версиированной динамической библиотеки есть символическая ссылка, например:
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>. -
RUNTIME_DEPENDENCY_SET -
Новая версия 3.21.
Этот параметр добавляет все зависимости времени выполнения установленных исполняемых файлов, динамических библиотек и модульных целей к указанному набору зависимостей времени выполнения. Этот набор затем может быть установлен с помощью команды install(RUNTIME_DEPENDENCY_SET).
Этот ключевой параметр и ключевой параметр
RUNTIME_DEPENDENCIESвзаимоисключают друг друга. -
RUNTIME_DEPENDENCIES -
Новая версия 3.21.
Этот параметр устанавливает все зависимости времени выполнения установленных исполняемых файлов, динамических библиотек и модульных целей вместе с самими целями. Параметры
RUNTIME,LIBRARY,FRAMEWORK, и общие параметры используются для определения свойств (DESTINATION,COMPONENT, и т.д.) установки этих зависимостей.RUNTIME_DEPENDENCIESсемантически эквивалентно следующей паре вызовов:install(TARGETS ... RUNTIME_DEPENDENCY_SET <set-name>) install(RUNTIME_DEPENDENCY_SET <set-name> args...)
где
<set-name>- случайное имя набора.args...может содержать любые из следующих ключевых слов, поддерживаемых командой install(RUNTIME_DEPENDENCY_SET):DIRECTORIESPRE_INCLUDE_REGEXESPRE_EXCLUDE_REGEXESPOST_INCLUDE_REGEXESPOST_EXCLUDE_REGEXESPOST_INCLUDE_FILESPOST_EXCLUDE_FILES
Ключевые слова
RUNTIME_DEPENDENCIESиRUNTIME_DEPENDENCY_SETвзаимоисключают друг друга.
Один или несколько наборов свойств могут быть указаны в одном вызове команды в формате 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 приводит к неопределенному поведению.
Новая версия 3.3: Путь установки, заданный как аргумент DESTINATION, может использовать "генераторские выражения" со синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений.
Новое в версии 3.13: install(TARGETS) может устанавливать цели, которые были созданы в других директориях. При использовании таких правил установки между директориями, выполнение make install (или аналогичного) из поддиректории не гарантирует, что цели из других директорий являются актуальными. Вы можете использовать target_link_libraries() или add_dependencies(), чтобы убедиться, что такие цели из других директорий будут скомпилированы до выполнения правил установки, специфичных для поддиректории.
Установка импортированных артефактов выполнения
Новое в версии 3.21.
install(IMPORTED_RUNTIME_ARTIFACTS targets...
[RUNTIME_DEPENDENCY_SET <set-name>]
[[LIBRARY|RUNTIME|FRAMEWORK|BUNDLE]
[DESTINATION <dir>]
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[OPTIONAL] [EXCLUDE_FROM_ALL]
] [...]
)
Форма IMPORTED_RUNTIME_ARTIFACTS определяет правила для установки артефактов выполнения импортированных целей. Проекты могут делать это, если они хотят объединить внешние исполняемые файлы или модули в свою установку. Аргументы LIBRARY, RUNTIME, FRAMEWORK, и BUNDLE имеют ту же семантику, что и в режиме TARGETS. Устанавливаются только артефакты выполнения импортированных целей (за исключением библиотек FRAMEWORK, исполняемых файлов MACOSX_BUNDLE и CFBundles BUNDLE). Например, заголовки и библиотеки импорта, связанные с DLL, не устанавливаются. В случае библиотек FRAMEWORK, исполняемых файлов MACOSX_BUNDLE и CFBundles BUNDLE устанавливается вся директория.
Опция RUNTIME_DEPENDENCY_SET добавляет артефакты выполнения импортированного исполняемого файла, динамической библиотеки и библиотеки модулей targets в набор зависимостей времени выполнения <set-name>. Этот набор затем может быть установлен с помощью команды install(RUNTIME_DEPENDENCY_SET).
Установка файлов
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, или используя встроенный по умолчанию, если эта переменная не определена. См. таблицу ниже для поддерживаемых типов файлов и соответствующих переменных и встроенных значений по умолчанию.
| Переменная GNUInstallDirs | Встроенное значение по умолчанию |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Проектам, которые хотят следовать общепринятой практике установки заголовков в поддиректории, специфичной для проекта, потребуется указать назначение, а не полагаться на вышеперечисленное.
Обратите внимание, что некоторые встроенные значения по умолчанию типов используют директорию DATAROOT в качестве префикса. Префикс DATAROOT вычисляется аналогично типам, с CMAKE_INSTALL_DATAROOTDIR как переменной и share как встроенным значением по умолчанию. Вы не можете использовать DATAROOT в качестве параметра TYPE; используйте DATA вместо этого.
Чтобы пакеты соответствовали политике форматирования файловой системы дистрибутива, если проекты должны указать DESTINATION, рекомендуется использовать путь, начинающийся с соответствующей переменной GNUInstallDirs. Это позволяет менеджерам пакетов контролировать место установки, задавая соответствующие переменные кэша. Следующий пример показывает, как следовать этому совету, устанавливая заголовки в поддиректорию, специфичную для проекта:
include(GNUInstallDirs)
install(FILES mylib.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
)
Новое в версии 3.4: Место назначения установки, заданное как аргумент DESTINATION, может использовать "генераторные выражения" со синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений.
Новое в версии 3.20: Переименование установки, заданное как аргумент RENAME, может использовать "генераторные выражения" со синтаксисом $<...>. См. руководство 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.
Новое в версии 3.1: Опция MESSAGE_NEVER отключает вывод информации о состоянии установки файлов.
Установка директорий может быть контролирована с высокой точностью с помощью опций PATTERN или REGEX. Эти опции "сопоставления" указывают шаблон подстановки или регулярное выражение для сопоставления директорий или файлов, встречающихся внутри входных директорий. Они могут быть использованы для применения определённых опций (см. ниже) к подмножеству файлов и директорий, обнаруженных в входных директориях. Полный путь к каждому входному файлу или директории (с прямыми слешами) сопоставляется с выражением. PATTERN будет соответствовать только полным именам файлов: часть полного пути, соответствующая шаблону, должна находиться в конце имени файла и предшествовать ему слеш. REGEX будет соответствовать любой части полного пути, но может использовать / и $ для моделирования поведения PATTERN. По умолчанию все файлы и директории устанавливаются, независимо от того, соответствуют ли они выражению. Опция FILES_MATCHING может быть указана перед первой опцией соответствия для отключения установки файлов (но не директорий), не соответствующих ни одному выражению. Например, код
install(DIRECTORY src/ DESTINATION include/myproj
FILES_MATCHING PATTERN "*.h")
извлечёт и установит заголовочные файлы из исходного дерева.
Некоторые параметры могут следовать за выражением PATTERN или REGEX, как описано в строке(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 вместо типа файла, если они хотят явно определить место назначения установки.
| Переменная GNUInstallDirs | Встроенное значение по умолчанию |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обратите внимание, что некоторые встроенные значения по умолчанию типов используют каталог DATAROOT в качестве префикса. Префикс DATAROOT рассчитывается аналогично типам, с CMAKE_INSTALL_DATAROOTDIR как переменной и share как встроенным значением по умолчанию. Вы не можете использовать DATAROOT в качестве параметра TYPE; используйте DATA вместо него.
Для обеспечения соответствия пакетов политике размещения файлов системы распределения, если проекты должны указать DESTINATION, рекомендуется использовать путь, начинающийся с соответствующей переменной GNUInstallDirs. Это позволяет администраторам пакетов управлять местом установки, задавая соответствующие переменные кэша.
Новое в версии 3.4: Место назначения установки, заданное как аргумент DESTINATION, может использовать "генераторские выражения" со синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений.
Новое в версии 3.5: Список dirs... предоставленных DIRECTORY также может использовать "генераторские выражения".
Пользовательская логика установки
install([[SCRIPT <file>] [CODE <code>]]
[ALL_COMPONENTS | COMPONENT <component>]
[EXCLUDE_FROM_ALL] [...])
Формат SCRIPT вызовет указанные файлы скриптов CMake во время установки. Если имя файла скрипта является относительным путём, он будет интерпретироваться относительно текущего каталога исходных файлов. Формат CODE вызовет указанный код CMake во время установки. Код указывается как единственный аргумент внутри двойных кавычек. Например, код
install(CODE "MESSAGE(\"Sample install message.\")")
выведет сообщение во время установки.
Новое в версии 3.21: Когда задан параметр ALL_COMPONENTS, пользовательский скрипт установки будет выполняться для каждого компонента при компонентно-специфической установке. Этот параметр взаимно исключает параметр COMPONENT.
Новое в версии 3.14: <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.
Примечание
Установленный файл <export-name>.cmake может содержать дополнительные файлы <export-name>-*.cmake для каждой конфигурации, которые загружаются с помощью шаблонов. Не используйте имя экспорта, совпадающее с именем пакета, в сочетании с установкой файла <package-name>-config.cmake, иначе последний может быть неверно сопоставлен шаблоном и загружен.
Когда задан параметр COMPONENT, перечисленные <component> неявно зависят от всех компонентов, упомянутых в наборе экспорта. Экспортированный файл <name>.cmake потребует наличия каждого из экспортированных компонентов для правильной сборки зависимых проектов. Например, проект может определить компоненты Runtime и Development, при этом общие библиотеки находятся в компоненте Runtime, а статические библиотеки и заголовки — в компоненте Development. Набор экспорта обычно также является частью компонента Development, но он экспортирует цели как из компонента Runtime, так и из компонента Development. Следовательно, компонент Runtime должен быть установлен, если установлен компонент Development, но не наоборот. Если компонент Development установлен без компонента Runtime, у зависимых проектов будут ошибки сборки. Управляющие пакеты, такие как APT и RPM, обычно обрабатывают это, перечисляя компонент Runtime в качестве зависимости от компонента Development в метаданных пакета, гарантируя, что библиотека всегда устанавливается, если заголовки и файл экспорта CMake присутствуют.
Новое в версии 3.7: В дополнение к файлам языка 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(), не определён.
Установка зависимостей времени выполнения
Новая в версии 3.21.
install(RUNTIME_DEPENDENCY_SET <set-name>
[[LIBRARY|RUNTIME|FRAMEWORK]
[DESTINATION <dir>]
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[NAMELINK_COMPONENT <component>]
[OPTIONAL] [EXCLUDE_FROM_ALL]
] [...]
[PRE_INCLUDE_REGEXES regexes...]
[PRE_EXCLUDE_REGEXES regexes...]
[POST_INCLUDE_REGEXES regexes...]
[POST_EXCLUDE_REGEXES regexes...]
[POST_INCLUDE_FILES files...]
[POST_EXCLUDE_FILES files...]
[DIRECTORIES directories...]
)
Устанавливает набор зависимостей времени выполнения, ранее созданный одной или несколькими командами install(TARGETS) или install(IMPORTED_RUNTIME_ARTIFACTS). Зависимости целевых объектов, входящих в набор зависимостей времени выполнения, устанавливаются в назначенное RUNTIME местоположение и компонент на платформах DLL, и в LIBRARY местоположение и компонент на платформах, не использующих DLL. Фреймворки macOS устанавливаются в FRAMEWORK местоположение и компонент.
Сгенерированный скрипт установки вызывает file(GET_RUNTIME_DEPENDENCIES) для файлов дерева сборки, чтобы рассчитать зависимости времени выполнения. Исполняемые файлы дерева сборки передаются в качестве аргумента EXECUTABLES, библиотеки динамической компоновки дерева сборки — как аргумент LIBRARIES, а модули — как аргумент MODULES. В macOS, если один из исполняемых файлов является MACOSX_BUNDLE, этот исполняемый файл передаётся как аргумент BUNDLE_EXECUTABLE. На macOS в наборе зависимостей времени выполнения может быть не более одного такого файла пакета.
Свойство MACOSX_BUNDLE не влияет на другие платформы. Обратите внимание, что file(GET_RUNTIME_DEPENDENCIES) поддерживает только сборку зависимостей времени выполнения для платформ Windows, Linux и macOS, поэтому install(RUNTIME_DEPENDENCY_SET) имеет такое же ограничение.
Следующие подаргументы передаются как соответствующие аргументы к file(GET_RUNTIME_DEPENDENCIES) (для тех, которые предоставляют список директорий, регулярных выражений или файлов, не являющийся пустым). Все они поддерживают generator expressions.
DIRECTORIES <directories>PRE_INCLUDE_REGEXES <regexes>PRE_EXCLUDE_REGEXES <regexes>POST_INCLUDE_REGEXES <regexes>POST_EXCLUDE_REGEXES <regexes>POST_INCLUDE_FILES <files>POST_EXCLUDE_FILES <files>
Сгенерированный скрипт установки
Примечание
Использование этой функции не рекомендуется. Пожалуйста, рассмотрите использование аргумента --install команды cmake(1) вместо неё.
Команда 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–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/command/install.html