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 <dir> -
Укажите каталог на диске, в который будет установлен файл.
<dir>должен быть относительным путем. Разрешен абсолютный путь, но он не рекомендуется.Когда задан относительный путь, он интерпретируется относительно значения переменной
CMAKE_INSTALL_PREFIX. Префикс можно переместить во время установки с помощью механизмаDESTDIR, описанного в документации переменнойCMAKE_INSTALL_PREFIX.Поскольку абсолютные пути не работают с опцией
--prefixкомандыcmake --install, или с установщиками генераторовcpack, настоятельно рекомендуется использовать относительные пути для лучшей поддержки со стороны администраторов пакетов. В частности, нет необходимости делать пути абсолютными, добавляя префиксCMAKE_INSTALL_PREFIX; этот префикс используется по умолчанию, если DESTINATION является относительным путем.Если задан абсолютный путь (с начальным слешем или буквой диска), он используется непосредственно.
-
PERMISSIONS <permission>... -
Укажите разрешения для установленных файлов. Допустимые разрешения:
OWNER_READ,OWNER_WRITE,OWNER_EXECUTE,GROUP_READ,GROUP_WRITE,GROUP_EXECUTE,WORLD_READ,WORLD_WRITE,WORLD_EXECUTE,SETUID, иSETGID. Разрешения, которые не имеют смысла на определенных платформах, игнорируются на этих платформах.Если эта опция используется несколько раз в одном вызове, список разрешений накапливается. Если вызов
install(TARGETS)использует аргументы <artifact-kind>, отдельный список разрешений накапливается для каждого типа артефакта. -
CONFIGURATIONS <config>... -
Укажите список конфигураций сборки, для которых применяется правило установки (Отладка, Релиз и т. д.).
Если эта опция используется несколько раз в одном вызове, список конфигураций накапливается. Если вызов
install(TARGETS)использует аргументы <artifact-kind>, отдельный список конфигураций накапливается для каждого типа артефакта. -
COMPONENT <component> -
Укажите имя компонента установки, к которому относится правило установки, например,
RuntimeилиDevelopment. Во время установки, специфичной для компонента, будут выполняться только правила установки, связанные с заданным именем компонента. При полной установке все компоненты устанавливаются, если не помечены какEXCLUDE_FROM_ALL. ЕслиCOMPONENTне указано, создается компонент по умолчанию "Unspecified". Имя компонента по умолчанию может управляться переменнойCMAKE_INSTALL_DEFAULT_COMPONENT_NAME. -
EXCLUDE_FROM_ALL -
Добавлена в версии 3.6.
Укажите, что файл исключен из полной установки и устанавливается только в рамках установки, специфичной для компонента.
-
RENAME <name> -
Укажите имя установленного файла, которое может отличаться от исходного файла. Переименование разрешено только при установке одного файла командой.
-
OPTIONAL -
Укажите, что если устанавливаемый файл не существует, это не является ошибкой.
Добавлена в версии 3.1: Подписи команд, устанавливающие файлы, могут выводить сообщения во время установки. Используйте переменную CMAKE_INSTALL_MESSAGE для управления отображением сообщений.
Добавлена в версии 3.11: Многие варианты команды install() неявно создают каталоги, содержащие установленные файлы. Если CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS установлено, эти каталоги будут созданы с указанными разрешениями. В противном случае они будут созданы в соответствии с правилами uname на платформах Unix-подобных системах. Платформы Windows не затронуты.
Подписи
-
install(TARGETS <target>... [...]) -
Установить целевой объект Выходные артефакты и связанные файлы:
install(TARGETS <target>... [EXPORT <export-name>] [RUNTIME_DEPENDENCIES <arg>...|RUNTIME_DEPENDENCY_SET <set-name>] [<artifact-option>...] [<artifact-kind> <artifact-option>...]... [INCLUDES DESTINATION [<dir> ...]] )где группа
<artifact-option>...может содержать:[DESTINATION <dir>] [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [COMPONENT <component>] [NAMELINK_COMPONENT <component>] [OPTIONAL] [EXCLUDE_FROM_ALL] [NAMELINK_ONLY|NAMELINK_SKIP]
Первая группа
<artifact-option>...относится к целевому объекту Выходные артефакты, для которых не указана отдельная группа позже в том же вызове.Каждая группа
<artifact-kind> <artifact-option>...применяется к Выходным артефактам указанного типа артефакта:-
ARCHIVE -
Целевые артефакты этого типа включают:
-
Статические библиотеки (кроме macOS, если отмечено как
FRAMEWORK, см. ниже); -
Импортируемые DLL-библиотеки (на всех системах на базе Windows, включая Cygwin; они имеют расширение
.lib, в отличие от библиотек.dll, которые попадают вRUNTIME); - В AIX, файл импорта компоновщика, созданный для исполняемых файлов с включённой опцией
ENABLE_EXPORTS. - В macOS, файл импорта компоновщика, созданный для динамических библиотек с включённой опцией
ENABLE_EXPORTS(кроме случаев, когда отмечено какFRAMEWORK, см. ниже).
-
Статические библиотеки (кроме 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. -
FILE_SET <set-name> -
Новое в версии 3.23.
Наборы файлов определяются командой
target_sources(FILE_SET). Если набор файлов<set-name>существует и имеет типPUBLICилиINTERFACE, все файлы в наборе устанавливаются в указанный каталог (см. ниже). Структура каталогов, относительная к базовым каталогам набора файлов, сохраняется. Например, файл, добавленный в набор файлов как/blah/include/myproj/here.hс базовым каталогом/blah/include, будет установлен вmyproj/here.hпод целевым каталогом. -
CXX_MODULES_BMI -
Новое в версии 3.28.
Любые модульные файлы из C++ модулей из
PUBLICисточников в наборе файлов типаCXX_MODULESбудут установлены в указанныйDESTINATION. Все модули размещаются непосредственно в целевом каталоге, так как структура каталогов не выводится из имён модулей. ПустойDESTINATIONможет использоваться для подавления установки этих файлов (для использования в общем коде).
Для обычных исполняемых файлов, статических библиотек и динамических библиотек аргумент
DESTINATIONне требуется. Для этих типов целевых объектов, еслиDESTINATIONопущено, целевой каталог будет взят из соответствующей переменной изGNUInstallDirs, или установлен по умолчанию, если эта переменная не определена. То же самое относится к наборам файлов, а также к общедоступным и закрытым заголовкам, связанным с устанавливаемыми целевыми объектами через свойства целевого объектаPUBLIC_HEADERиPRIVATE_HEADER. Целевой каталог всегда должен быть предоставлен для модульных библиотек, пакетов Apple и фреймворков. Целевой каталог может быть опущен для интерфейсных и объектных библиотек, но они обрабатываются по-другому (см. обсуждение этой темы в конце этого раздела).Для динамических библиотек на платформах DLL, если не указаны ни целевые каталоги
RUNTIMEниARCHIVE, оба компонентаRUNTIMEиARCHIVEустанавливаются в свои каталоги по умолчанию. Если указан либо каталогRUNTIMEлибоARCHIVE, компонент устанавливается в этот каталог, а другой компонент не устанавливается. Если указаны оба целевых каталогаRUNTIMEиARCHIVE, оба компонента устанавливаются в свои соответствующие каталоги.В следующей таблице показаны типы целевых объектов с соответствующими переменными и значениями по умолчанию, которые применяются, когда целевой каталог не указан:
Тип целевого объекта
Переменная GNUInstallDirs
Значение по умолчанию
RUNTIME${CMAKE_INSTALL_BINDIR}binLIBRARY${CMAKE_INSTALL_LIBDIR}libARCHIVE${CMAKE_INSTALL_LIBDIR}libPRIVATE_HEADER${CMAKE_INSTALL_INCLUDEDIR}includePUBLIC_HEADER${CMAKE_INSTALL_INCLUDEDIR}includeFILE_SET(типHEADERS)${CMAKE_INSTALL_INCLUDEDIR}includeПроекты, желающие следовать общепринятой практике установки заголовков в подкаталог проекта, могут предпочесть использовать наборы файлов с соответствующими путями и базовыми каталогами. В противном случае, они должны указать
DESTINATIONвместо того, чтобы полагаться на вышеперечисленное (см. следующий пример ниже).Для обеспечения соответствия политик макета файловой системы распределения, если проекты должны указать
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является ошибкой.Изменено в версии 3.27: Этот параметр также можно использовать для блока
ARCHIVEдля управления создаваемым на macOS файлом импорта компоновщика для разделяемых библиотек с включеннымENABLE_EXPORTS.Пример использования
NAMELINK_COMPONENTсм. в Примере: Установка целевых объектов с компонентами на элемент.Этот параметр обычно используется для систем управления пакетами, которые имеют отдельные пакеты для выполнения и разработки. Например, на системах Debian ожидается, что библиотека будет в пакете выполнения, а заголовки и имя ссылки — в пакете разработки.
См. свойства целевых объектов
VERSIONиSOVERSIONдля получения подробной информации о создании разделяемых библиотек с версиями. -
NAMELINK_ONLY -
Этот параметр устанавливает только имя ссылки, когда устанавливается целевой объект библиотеки. На платформах, где версия разделяемой библиотеки не имеет имен ссылок или когда библиотека не имеет версии, параметр
NAMELINK_ONLYничего не устанавливает. Использование этого параметра вне блокаLIBRARYявляется ошибкой.Изменено в версии 3.27: Этот параметр также можно использовать для блока
ARCHIVEдля управления создаваемым на macOS файлом импорта компоновщика для разделяемых библиотек с включеннымENABLE_EXPORTS.Когда задан параметр
NAMELINK_ONLY, можно использовать либоNAMELINK_COMPONENT, либоCOMPONENT, чтобы указать компонент установки имени ссылки, но рекомендуется использоватьCOMPONENT. -
NAMELINK_SKIP -
Аналогично
NAMELINK_ONLY, но с обратным эффектом: устанавливает файлы библиотеки, кроме имени ссылки, при установке целевого объекта библиотеки. Если не заданы ниNAMELINK_ONLY, ниNAMELINK_SKIP, устанавливаются обе части. На платформах, где версия разделяемых библиотек не имеет символических ссылок или когда библиотека не имеет версии,NAMELINK_SKIPустанавливает библиотеку. Использование этого параметра вне блокаLIBRARYявляется ошибкой.Изменено в версии 3.27: Этот параметр также можно использовать для блока
ARCHIVEдля управления создаваемым на macOS файлом импорта компоновщика для разделяемых библиотек с включеннымENABLE_EXPORTS.Если задан параметр
NAMELINK_SKIP,NAMELINK_COMPONENTне оказывает никакого эффекта. Не рекомендуется использоватьNAMELINK_SKIPсовместно сNAMELINK_COMPONENT.
Команда
install(TARGETS)также может принимать следующие параметры на верхнем уровне:-
EXPORT -
Этот параметр связывает установленные файлы целевых объектов с экспортом под названием
<export-name>. Он должен быть задан до любых параметров целевых объектов. Для фактической установки файла экспорта вызовитеinstall(EXPORT), описание которой приведено ниже. Обратитесь к документации свойства целевого объектаEXPORT_NAMEдля изменения имени экспортируемого целевого объекта.Если используется
EXPORT, и целевые объекты включают наборы файловPUBLICилиINTERFACE, все они должны быть указаны с аргументамиFILE_SET. Все наборы файловPUBLICилиINTERFACEцелевого объекта включены в экспорт. -
INCLUDES DESTINATION -
Этот параметр определяет список каталогов, которые будут добавлены к свойству целевого объекта
INTERFACE_INCLUDE_DIRECTORIES<targets>при экспорте командойinstall(EXPORT). Если указан относительный путь, он считается относительным к$<INSTALL_PREFIX>. -
RUNTIME_DEPENDENCY_SET <set-name> -
Новое в версии 3.21.
Этот параметр добавляет все зависимости времени выполнения установленных целевых объектов типа исполняемый файл, разделяемая библиотека и модуль в указанный набор зависимостей времени выполнения. Этот набор затем может быть установлен с помощью команды
install(RUNTIME_DEPENDENCY_SET).Этот ключевое слово и ключевое слово
RUNTIME_DEPENDENCIESвзаимоисключающие. -
RUNTIME_DEPENDENCIES <arg>... -
Новое в версии 3.21.
Этот параметр устанавливает все зависимости времени выполнения установленных целевых объектов типа исполняемый файл, разделяемая библиотека и модуль вместе с самими целевыми объектами. Аргументы
RUNTIME,LIBRARY,FRAMEWORK, и общие аргументы используются для определения свойств (DESTINATION,COMPONENT, и т. д.) установки этих зависимостей.RUNTIME_DEPENDENCIESсемантически эквивалентно следующей паре вызовов:install(TARGETS ... RUNTIME_DEPENDENCY_SET <set-name>) install(RUNTIME_DEPENDENCY_SET <set-name> <arg>...)
где
<set-name>— случайно сгенерированное имя набора.<arg>...может содержать любые из следующих ключевых слов, поддерживаемых командойinstall(RUNTIME_DEPENDENCY_SET):DIRECTORIESPRE_INCLUDE_REGEXESPRE_EXCLUDE_REGEXESPOST_INCLUDE_REGEXESPOST_EXCLUDE_REGEXESPOST_INCLUDE_FILESPOST_EXCLUDE_FILES
Ключевые слова
RUNTIME_DEPENDENCIESиRUNTIME_DEPENDENCY_SETвзаимоисключающие.
Целевые объекты Библиотеки интерфейса могут быть перечислены среди целевых объектов для установки. Они не устанавливают артефакты, но будут включены в связанный
EXPORT. Если целевые объекты Объектные библиотеки перечислены, но им не указано место назначения для их объектных файлов, они будут экспортированы как Библиотеки интерфейса. Этого достаточно, чтобы удовлетворить требованиям транзитивного использования других целевых объектов, которые ссылаются на объектные библиотеки в своей реализации.Установка целевого объекта со свойством целевого объекта
EXCLUDE_FROM_ALL, установленным вTRUE, имеет неопределённое поведение.Новое в версии 3.3: Целевое назначение, заданное аргументом
DESTINATION, может использовать «генераторные выражения» со синтаксисом$<...>. См. руководство поcmake-generator-expressions(7)для доступных выражений.Новое в версии 3.13:
install(TARGETS)может устанавливать целевые объекты, которые были созданы в других каталогах. При использовании таких правил установки между каталогами запускmake install(или аналогичного) из подкаталога не гарантирует, что целевые объекты из других каталогов являются актуальными. Можно использоватьtarget_link_libraries()илиadd_dependencies()для обеспечения того, чтобы такие целевые объекты из других каталогов были построены до запуска правил установки, специфичных для подкаталога.-
-
install(IMPORTED_RUNTIME_ARTIFACTS <target>... [...]) -
Добавлено в версии 3.21.
Установить артефакты выполнения импортированных целей:
install(IMPORTED_RUNTIME_ARTIFACTS <target>... [RUNTIME_DEPENDENCY_SET <set-name>] [[LIBRARY|RUNTIME|FRAMEWORK|BUNDLE] [DESTINATION <dir>] [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [COMPONENT <component>] [OPTIONAL] [EXCLUDE_FROM_ALL] ] [...] )Форма
IMPORTED_RUNTIME_ARTIFACTSопределяет правила установки артефактов выполнения импортированных целей. Проекты могут делать это, если они хотят объединить внешние исполняемые файлы или модули внутри своей установки. АргументыLIBRARY,RUNTIME,FRAMEWORK, иBUNDLEимеют те же семантику, что и в режиме ЦЕЛЕЙ. Устанавливаются только артефакты выполнения импортированных целей (за исключением библиотекFRAMEWORK, исполняемых файловMACOSX_BUNDLEи CFBundlesBUNDLE). Например, заголовки и библиотеки импорта, связанные с DLL, не устанавливаются. В случае библиотекFRAMEWORK, исполняемых файловMACOSX_BUNDLEи CFBundlesBUNDLE, устанавливается вся директория.Опция
RUNTIME_DEPENDENCY_SETдобавляет артефакты выполнения импортированных исполняемых файлов, динамических библиотек и модульных библиотекtargetsв набор зависимостей выполнения<set-name>. Затем этот набор можно установить командойinstall(RUNTIME_DEPENDENCY_SET).
-
install(FILES <file>... [...]) -
install(PROGRAMS <program>... [...]) -
Примечание
При установке заголовочных файлов рассмотрите использование наборов файлов, определённых с помощью
target_sources(FILE_SET). Наборы файлов связывают заголовки с целью и устанавливаются как часть цели.Установить файлы или программы:
install(<FILES|PROGRAMS> <file>... TYPE <type> | DESTINATION <dir> [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [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}binSBIN${CMAKE_INSTALL_SBINDIR}sbinLIB${CMAKE_INSTALL_LIBDIR}libINCLUDE${CMAKE_INSTALL_INCLUDEDIR}includeSYSCONF${CMAKE_INSTALL_SYSCONFDIR}etcSHAREDSTATE${CMAKE_INSTALL_SHARESTATEDIR}comLOCALSTATE${CMAKE_INSTALL_LOCALSTATEDIR}varRUNSTATE${CMAKE_INSTALL_RUNSTATEDIR}<LOCALSTATE dir>/runDATA${CMAKE_INSTALL_DATADIR}<DATAROOT dir>INFO${CMAKE_INSTALL_INFODIR}<DATAROOT dir>/infoLOCALE${CMAKE_INSTALL_LOCALEDIR}<DATAROOT dir>/localeMAN${CMAKE_INSTALL_MANDIR}<DATAROOT dir>/manDOC${CMAKE_INSTALL_DOCDIR}<DATAROOT dir>/docПроектам, которые хотят следовать общей практике установки заголовков в подкаталог проекта, нужно указать назначение, а не полагаться на вышеперечисленные значения. Использование наборов файлов для заголовков вместо
install(FILES)было бы ещё лучше (см.target_sources(FILE_SET)).Обратите внимание, что некоторые значения по умолчанию для типов используют директорию
DATAROOTв качестве префикса. ПрефиксDATAROOTвычисляется аналогично типам, с переменнойCMAKE_INSTALL_DATAROOTDIRи значением по умолчаниюshare. Вы не можете использоватьDATAROOTв качестве параметраTYPE; используйтеDATAвместо этого.Для обеспечения соответствия пакетов политикам макета файловой системы, если проектам нужно указать
DESTINATION, настоятельно рекомендуется использовать путь, начинающийся с соответствующей относительной переменнойGNUInstallDirs. Это позволяет разработчикам пакетов управлять местом установки, задавая соответствующие переменные кэша. Следующий пример показывает, как следовать этому совету при установке изображения в подкаталог документации проекта:include(GNUInstallDirs) install(FILES logo.png DESTINATION ${CMAKE_INSTALL_DOCDIR}/myproj )Добавлено в версии 3.4: Назначение установки, заданное как аргумент
DESTINATION, может использовать «генераторные выражения» в синтаксисе$<...>. Обратитесь к руководствуcmake-generator-expressions(7)для получения доступных выражений.Добавлено в версии 3.20: Переименование установки, заданное как аргумент
RENAME, может использовать «генераторные выражения» в синтаксисе$<...>. Обратитесь к руководствуcmake-generator-expressions(7)для получения доступных выражений.
-
install(DIRECTORY <dir>... [...]) -
Примечание
Для установки поддерева каталога заголовков, рассмотрите использование наборов файлов, определённых с помощью
target_sources(FILE_SET)вместо этого. Наборы файлов не только сохраняют структуру каталогов, но также связывают заголовки с целевым объектом и устанавливают их как часть целевого объекта.Установите содержимое одного или нескольких каталогов:
install(DIRECTORY dirs... TYPE <type> | DESTINATION <dir> [FILE_PERMISSIONS <permission>...] [DIRECTORY_PERMISSIONS <permission>...] [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER] [CONFIGURATIONS <config>...] [COMPONENT <component>] [EXCLUDE_FROM_ALL] [FILES_MATCHING] [[PATTERN <pattern> | REGEX <regex>] [EXCLUDE] [PERMISSIONS <permission>...]] [...])Форма
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 doc/myproj FILES_MATCHING PATTERN "*.png")извлечёт и установит изображения из дерева исходных данных.
Некоторые опции могут следовать за выражением
PATTERNилиREGEX, как описано в string(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}binSBIN${CMAKE_INSTALL_SBINDIR}sbinLIB${CMAKE_INSTALL_LIBDIR}libINCLUDE${CMAKE_INSTALL_INCLUDEDIR}includeSYSCONF${CMAKE_INSTALL_SYSCONFDIR}etcSHAREDSTATE${CMAKE_INSTALL_SHARESTATEDIR}comLOCALSTATE${CMAKE_INSTALL_LOCALSTATEDIR}varRUNSTATE${CMAKE_INSTALL_RUNSTATEDIR}<LOCALSTATE dir>/runDATA${CMAKE_INSTALL_DATADIR}<DATAROOT dir>INFO${CMAKE_INSTALL_INFODIR}<DATAROOT dir>/infoLOCALE${CMAKE_INSTALL_LOCALEDIR}<DATAROOT dir>/localeMAN${CMAKE_INSTALL_MANDIR}<DATAROOT dir>/manDOC${CMAKE_INSTALL_DOCDIR}<DATAROOT dir>/docОбратите внимание, что некоторые значения по умолчанию для типов используют каталог
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> [...]) -
install(CODE <code> [...]) -
Вызвать скрипты CMake или код во время установки:
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> [...]) -
Установить файл CMake, экспортирующий цели для зависимых проектов:
install(EXPORT <export-name> DESTINATION <dir> [NAMESPACE <namespace>] [FILE <name>.cmake] [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [CXX_MODULES_DIRECTORY <directory>] [EXPORT_LINK_INTERFACE_LIBRARIES] [COMPONENT <component>] [EXCLUDE_FROM_ALL] [EXPORT_PACKAGE_DEPENDENCIES]) install(EXPORT_ANDROID_MK <export-name> DESTINATION <dir> [...])Форма
EXPORTгенерирует и устанавливает файл CMake, содержащий код для импорта целей из дерева установки в другой проект. Установки целей связаны с экспортом<export-name>с помощью опцииEXPORTсигнатурыinstall(TARGETS), документированной выше. ОпцияNAMESPACEдобавит префикс<namespace>к именам целей при их записи в файл импорта. По умолчанию сгенерированный файл будет называться<export-name>.cmake, но опцияFILEможет быть использована для указания другого имени. Значение, переданное опцииFILE, должно быть именем файла с расширением.cmake. Если указана опцияCONFIGURATIONS, то файл будет установлен только при установке одной из перечисленных конфигураций. Кроме того, сгенерированный файл импорта будет ссылаться только на соответствующие конфигурации целей. Смотрите переменнуюCMAKE_MAP_IMPORTED_CONFIG_<CONFIG>для сопоставления конфигураций зависимых проектов с установленными конфигурациями. Ключевое слово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, с полным набором транзитивных зависимостей, флагами включения и определениями, необходимыми для использования библиотек.-
CXX_MODULES_DIRECTORY -
Новое в версии 3.28.
Укажите подкаталог для хранения информации о модулях C++ для целей в наборе экспорта. Этот каталог будет заполнен файлами, которые добавляют необходимую информацию о свойствах целей в соответствующие цели. Обратите внимание, что без этой информации ни один из модулей C++, являющихся частью целей в наборе экспорта, не будет поддерживать импорт в целевые проекты.
-
EXPORT_PACKAGE_DEPENDENCIES -
Примечание
Экспериментальная опция. Включена с помощью
CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_DEPENDENCIES.Укажите, что вызовы
find_dependency()должны быть экспортированы. Если этот аргумент указан, CMake анализирует все цели в наборе экспорта и собирает их цели ссылокINTERFACE. Если такие цели были найдены с помощьюfind_package()или имеют установленное свойствоEXPORT_FIND_PACKAGE_NAME, и такая зависимость пакета не была отключена путём передачиENABLED OFFвexport(SETUP), тогда вызовfind_dependency()записывается с именем пакета соответствующей цели, аргументомREQUIREDи любыми дополнительными аргументами, указанными в аргументеEXTRA_ARGSвызоваexport(SETUP). Любые зависимости пакетов, которые были указаны вручную путём передачиENABLED ONвexport(SETUP), также добавляются, даже если экспортируемые цели не зависят от каких-либо целей из них.Вызовы
find_dependency()записываются в следующем порядке:- Любые зависимости пакетов, которые были перечислены в
export(SETUP), записываются в порядке их первого указания, независимо от того, содержат ли они зависимостиINTERFACEэкспортируемых целей. - Любые зависимости пакетов, которые содержат зависимости ссылок
INTERFACEэкспортируемых целей и которые никогда не были указаны вexport(SETUP), записываются в порядке их первого обнаружения.
- Любые зависимости пакетов, которые были перечислены в
Форма
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(RUNTIME_DEPENDENCY_SET <set-name> [...]) -
Новое в версии 3.21.
Устанавливает набор зависимостей времени выполнения:
install(RUNTIME_DEPENDENCY_SET <set-name> [[LIBRARY|RUNTIME|FRAMEWORK] [DESTINATION <dir>] [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [COMPONENT <component>] [NAMELINK_COMPONENT <component>] [OPTIONAL] [EXCLUDE_FROM_ALL] ] [...] [PRE_INCLUDE_REGEXES <regex>...] [PRE_EXCLUDE_REGEXES <regex>...] [POST_INCLUDE_REGEXES <regex>...] [POST_EXCLUDE_REGEXES <regex>...] [POST_INCLUDE_FILES <file>...] [POST_EXCLUDE_FILES <file>...] [DIRECTORIES <dir>...] )Устанавливает набор зависимостей времени выполнения, созданный ранее одной или несколькими командами
install(TARGETS)илиinstall(IMPORTED_RUNTIME_ARTIFACTS). Зависимости целей, принадлежащих набору зависимостей времени выполнения, устанавливаются в назначениеRUNTIMEи компонент на платформах DLL и в назначениеLIBRARYи компонент на платформах, не использующих DLL. Фреймворки macOS устанавливаются в назначениеFRAMEWORKи компонент. Цели, скомпилированные в дереве сборки, никогда не будут установлены в качестве зависимостей времени выполнения, ни их собственные зависимости, если сами цели не установлены с помощьюinstall(TARGETS).Сгенерированный скрипт установки вызывает
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 <dir>...PRE_INCLUDE_REGEXES <regex>...PRE_EXCLUDE_REGEXES <regex>...POST_INCLUDE_REGEXES <regex>...POST_EXCLUDE_REGEXES <regex>...POST_INCLUDE_FILES <file>...POST_EXCLUDE_FILES <file>...
Примечание
Эта команда заменяет команду install_targets() и свойства целевых свойств PRE_INSTALL_SCRIPT и POST_INSTALL_SCRIPT. Она также заменяет формы FILES команд install_files() и install_programs(). Порядок обработки этих правил установки относительно правил, сгенерированных командами install_targets(), install_files() и install_programs(), не определён.
Примеры
Пример: Установка целей с компонентами на уровне артефактов
Рассмотрим проект, определяющий цели с разными типами артефактов:
add_executable(myExe myExe.c) add_library(myStaticLib STATIC myStaticLib.c) target_sources(myStaticLib PUBLIC FILE_SET HEADERS FILES myStaticLib.h) add_library(mySharedLib SHARED mySharedLib.c) target_sources(mySharedLib PUBLIC FILE_SET HEADERS FILES mySharedLib.h) set_property(TARGET mySharedLib PROPERTY SOVERSION 1)
Мы можем вызвать install(TARGETS) с аргументами <artifact-kind> для задания разных параметров для каждого типа артефакта:
install(TARGETS
myExe
mySharedLib
myStaticLib
RUNTIME # Following options apply to runtime artifacts.
COMPONENT Runtime
LIBRARY # Following options apply to library artifacts.
COMPONENT Runtime
NAMELINK_COMPONENT Development
ARCHIVE # Following options apply to archive artifacts.
COMPONENT Development
DESTINATION lib/static
FILE_SET HEADERS # Following options apply to file set HEADERS.
COMPONENT Development
)
Это приведет к:
- Установка
myExeв<prefix>/bin, по умолчанию место назначения артефакта RUNTIME, как часть компонентаRuntime. -
На платформах, не использующих DLL:
- Установка
libmySharedLib.so.1в<prefix>/lib, по умолчанию место назначения артефакта LIBRARY, как часть компонентаRuntime. - Установка
libmySharedLib.so"namelink" (символической ссылки) в<prefix>/lib, по умолчанию место назначения артефакта LIBRARY, как часть компонентаDevelopment.
- Установка
-
На платформах, использующих DLL:
- Установка
mySharedLib.dllв<prefix>/bin, по умолчанию место назначения артефакта RUNTIME, как часть компонентаRuntime. - Установка
mySharedLib.libв<prefix>/lib/static, заданном месте назначения артефакта ARCHIVE, как часть компонентаDevelopment.
- Установка
- Установка
myStaticLibв<prefix>/lib/static, заданном месте назначения артефакта ARCHIVE, как часть компонентаDevelopment. - Установка
mySharedLib.hиmyStaticLib.hв<prefix>/include, по умолчанию место назначения набора файлов типа HEADERS, как часть компонентаDevelopment.
Пример: Установка целей в места назначения на основе конфигурации
Каждый вызов install(TARGETS) устанавливает заданный целевой артефакт вывода максимум в одно DESTINATION, но само правило установки может быть отфильтровано параметром CONFIGURATIONS. Для установки в различное место назначения для каждой конфигурации необходим отдельный вызов для каждой конфигурации. Например, код:
install(TARGETS myExe
CONFIGURATIONS Debug
RUNTIME
DESTINATION Debug/bin
)
install(TARGETS myExe
CONFIGURATIONS Release
RUNTIME
DESTINATION Release/bin
)
установит myExe в <prefix>/Debug/bin в конфигурации Debug и в <prefix>/Release/bin в конфигурации Release.
Сгенерированный скрипт установки
Примечание
Использование этой функции не рекомендуется. Пожалуйста, рассмотрите использование cmake --install вместо неё.
Команда 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–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.29/command/install.html