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> -
Укажите каталог на диске, в который будет установлен файл. Аргументы могут быть относительными или абсолютными путями.
Если указан относительный путь, он интерпретируется относительно значения переменной
CMAKE_INSTALL_PREFIX. Префикс может быть перемещён во время установки с помощью механизмаDESTDIR, описанного в документации переменнойCMAKE_INSTALL_PREFIX.Если указан абсолютный путь (с ведущей косой чертой или буквой диска), он используется дословно.
Поскольку абсолютные пути не поддерживаются генераторами установщиков
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>... -
Укажите список конфигураций сборки, для которых применяется правило установки (Debug, Release и т.д.).
Если этот параметр используется несколько раз в одном вызове, список конфигураций накапливается. Если вызов
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— имя soname библиотеки, а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имеют те же семантику, что и в режиме TARGETS. Устанавливаются только исполняемые файлы импортированных целей (за исключением библиотек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]) 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полезна для помощи внешним проектам в использовании целей, собранных и установленных текущим проектом. Например, код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(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>...
Примеры
Пример: Установка целей с компонентами для каждого артефакта
Рассмотрим проект, который определяет цели с различными типами артефактов:
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.28/command/install.html