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(PACKAGE_INFO <package-name> [...])
install(RUNTIME_DEPENDENCY_SET <set-name> [...])
install(SBOM <sbom-name> [...]) Введение
Эта команда создаёт правила установки для проекта. Правила установки, заданные вызовами команды install() в исходном каталоге, выполняются по порядку во время установки.
Изменено в версии 3.14: Правила установки в подкаталогах, добавленных вызовами команды add_subdirectory(), чередуются с правилами родительского каталога и выполняются в объявленном порядке (см. политику CMP0082).
Изменено в версии 3.22: Переменная среды CMAKE_INSTALL_MODE может переопределять поведение копирования по умолчанию команды install().
Изменено в версии 3.31: Проекты могут включить INSTALL_PARALLEL, чтобы включить параллельную установку. При параллельной установке подкаталоги, добавленные вызовами команды add_subdirectory(), устанавливаются независимо, а порядок выполнения правил установки, добавленных в разных подкаталогах, не гарантируется.
Общие параметры
У этой команды есть несколько вариантов синтаксиса. Некоторые из них задают параметры установки файлов и целей. Здесь описаны параметры, общие для нескольких вариантов синтаксиса, однако они допустимы только в тех вариантах, где указаны. Общие параметры:
-
DESTINATION <dir> -
Задаёт каталог на диске, в который будет установлен файл.
<dir>должен быть относительным путём. Допускается абсолютный путь, но использовать его не рекомендуется.Добавлено в версии 4.4: Диагностику
CMD_INSTALL_ABSOLUTE_DESTINATIONможно включить, чтобы выдавать предупреждение или ошибку при указании абсолютного пути назначения.Если задан относительный путь, он интерпретируется относительно значения переменной
CMAKE_INSTALL_PREFIX. Префикс можно переместить во время установки с помощью механизмаDESTDIR, описанного в документации переменнойCMAKE_INSTALL_PREFIX.Поскольку абсолютные пути несовместимы с параметром
--prefixкомандыcmake --installи с генераторами установщикаcpack, настоятельно рекомендуется везде использовать относительные пути, чтобы обеспечить наилучшую совместимость с сопровождающими пакетов. В частности, нет необходимости преобразовывать пути в абсолютные, добавляя в началоCMAKE_INSTALL_PREFIX; этот префикс используется по умолчанию, если DESTINATION задан как относительный путь.Если задан абсолютный путь (начинающийся с косой черты или буквы диска), он используется без изменений.
Изменено в версии 3.31:
<dir>нормализуется согласно тем же правилам нормализации, что и командаcmake_path(). -
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.Компоненты установки можно использовать с параметром
--componentкомандыcmake --installи с модулемCPackComponent. Глобальная цельlist_install_componentsсодержит список всех доступных компонентов. -
EXCLUDE_FROM_ALL -
Добавлено в версии 3.6.
Задаёт, что файл исключается из полной установки и устанавливается только в рамках установки отдельного компонента.
-
OPTIONAL -
Задаёт, что отсутствие устанавливаемого файла не считается ошибкой.
Добавлено в версии 3.1: Варианты синтаксиса команды, устанавливающие файлы, могут выводить сообщения во время установки. Используйте переменную CMAKE_INSTALL_MESSAGE, чтобы управлять выводом сообщений.
Добавлено в версии 3.11: Многие варианты install() неявно создают каталоги, содержащие устанавливаемые файлы. Если задана переменная CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS, эти каталоги будут созданы с указанными правами доступа. В противном случае на Unix-подобных платформах они будут созданы в соответствии с правилами uname. На платформах 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, в macOS рассматриваются как целевые объектыFRAMEWORK. -
BUNDLE -
Исполняемые файлы, помеченные свойством
MACOSX_BUNDLE, в macOS рассматриваются как целевые объектыBUNDLE. -
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, все файлы типаHEADERSиз этого набора устанавливаются в указанное место назначения (см. ниже). Для файлов других типов место назначения по умолчанию не задано, поэтому для каждогоFILE_SETнеобходимо указать параметрDESTINATION. Структура каталогов относительно базовых каталогов набора файлов сохраняется. Например, файл, добавленный в набор файлов как/blah/include/myproj/here.hс базовым каталогом/blah/include, будет установлен вmyproj/here.hвнутри места назначения. -
CXX_MODULES_BMI -
Добавлено в версии 3.28.
Все файлы модулей C++ из исходных файлов
PUBLICв наборе файлов типаCXX_MODULESбудут установлены в указанноеDESTINATION. Все модули помещаются непосредственно в место назначения, поскольку по именам модулей невозможно определить структуру каталогов. Для запрета установки этих файлов можно использовать пустойDESTINATION(например, в универсальном коде).
Для обычных исполняемых файлов, статических и динамических библиотек аргумент
DESTINATIONне требуется. Если для этих типов целей параметрDESTINATIONопущен, место назначения по умолчанию берётся из соответствующей переменной модуляGNUInstallDirsлибо задаётся встроенным значением по умолчанию, если эта переменная не определена. То же относится к наборам файлов типаHEADERS, а также к общедоступным и закрытым заголовочным файлам, связанным с устанавливаемыми целями через целевые свойства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— «namelink», позволяющая компоновщикам найти библиотеку при указании-l<name>. ПараметрNAMELINK_COMPONENTаналогичен параметруCOMPONENT, но изменяет компонент установки namelink динамической библиотеки, если такая ссылка создаётся. Если параметр не указан, по умолчанию используется значениеCOMPONENT. Использовать этот параметр вне блокаLIBRARYнельзя.Изменено в версии 3.27: Этот параметр также можно использовать в блоке
ARCHIVEдля управления файлом импорта компоновщика, создаваемым в macOS для динамических библиотек с включённым свойствомENABLE_EXPORTS.Пример использования
NAMELINK_COMPONENTсм. в разделе Пример: установка целей с компонентами для каждого артефакта.Этот параметр обычно используется менеджерами пакетов, в которых пакеты времени выполнения и разработки разделены. Например, в системах Debian библиотека должна входить в пакет времени выполнения, а заголовочные файлы и namelink — в пакет разработки.
Подробные сведения о создании динамических библиотек с номерами версий см. в описаниях целевых свойств
VERSIONиSOVERSION. -
NAMELINK_ONLY -
Этот параметр приводит к установке только namelink при установке целевой библиотеки. На платформах, где у динамических библиотек с номером версии нет namelink, или если библиотека не имеет номера версии, параметр
NAMELINK_ONLYничего не устанавливает. Использовать этот параметр вне блокаLIBRARYнельзя.Изменено в версии 3.27: Этот параметр также можно использовать в блоке
ARCHIVEдля управления файлом импорта компоновщика, создаваемым в macOS для динамических библиотек с включённым свойствомENABLE_EXPORTS.Если указан параметр
NAMELINK_ONLY, для задания компонента установки namelink можно использоватьNAMELINK_COMPONENTилиCOMPONENT, но обычно предпочтительнееCOMPONENT. -
NAMELINK_SKIP -
Аналогично
NAMELINK_ONLY, но с противоположным эффектом: при установке целевой библиотеки устанавливаются файлы библиотеки, отличные от namelink. Если не заданы ни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>.В отличие от других аргументов
DESTINATIONразличных подкомандinstall(), пути, указанные послеINCLUDES DESTINATION, используются как есть. Они не нормализуются, и не предполагается, что они нормализованы, хотя рекомендуется указывать их в нормализованном виде (см. раздел Нормализация). -
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илиPROGRAMS, можно использовать «генераторные выражения» с синтаксисом$<...>. Доступные выражения описаны в руководствеcmake-generator-expressions(7). Однако если какой-либо элемент начинается с генераторного выражения, оно должно вычисляться в полный путь.Необязательный аргумент
RENAME <name>используется для указания имени устанавливаемого файла, отличного от исходного имени файла. Переименование разрешено только в том случае, если команда устанавливает один файл.Необходимо указать либо
TYPE, либоDESTINATION, но не оба аргумента одновременно. АргументTYPEзадаёт общий тип устанавливаемых файлов. После этого место назначения задаётся автоматически: используется соответствующая переменная изGNUInstallDirsили встроенное значение по умолчанию, если эта переменная не определена. Поддерживаемые типы файлов и соответствующие им переменные и встроенные значения по умолчанию приведены в таблице ниже. Вместо типа файла проекты могут указать аргументDESTINATION, если хотят явно задать место установки.Аргумент
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>/docLIBEXEC${CMAKE_INSTALL_LIBEXECDIR}libexecПроектам, которые следуют распространённой практике установки заголовков в подкаталог, относящийся к проекту, необходимо задать место назначения, а не полагаться на приведённые выше значения. Ещё лучше использовать наборы файлов для заголовков вместо
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).Добавлено в версии 3.31: Аргумент
TYPEтеперь поддерживает типLIBEXEC.
-
install(DIRECTORY <dir>... [...]) -
Примечание
Чтобы установить поддерево каталогов с заголовками, рассмотрите возможность использования наборов файлов, определённых с помощью
target_sources(FILE_SET). Наборы файлов не только сохраняют структуру каталогов, но и связывают заголовки с целью и устанавливаются вместе с ней.Установка содержимого одного или нескольких каталогов:
install(DIRECTORY <dir>... 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] [<match-rule> <match-option>...]... )Форма
DIRECTORYустанавливает содержимое одного или нескольких каталогов в указанное место назначения. Структура каталогов копируется в место назначения без изменений.Необходимо указать либо
TYPE, либоDESTINATION, но не оба аргумента одновременно. Если права не заданы, файлам назначаются права по умолчанию, указанные в форме команды FILES, а каталогам — права по умолчанию, указанные в форме команды PROGRAMS.Доступны следующие параметры:
-
<dir>... -
Список устанавливаемых каталогов.
Последний компонент имени каждого каталога добавляется к каталогу назначения, но этого можно избежать, добавив завершающий символ косой черты, поскольку в таком случае последний компонент будет пустым. Имена каталогов, заданные относительными путями, интерпретируются относительно текущего исходного каталога. Если имена исходных каталогов не заданы, каталог назначения будет создан, но в него ничего не будет установлено.
Добавлено в версии 3.5: В списке исходных каталогов
<dir>...можно использовать «генераторные выражения» с синтаксисом$<...>. Доступные выражения описаны в руководствеcmake-generator-expressions(7). -
TYPE <type> -
Задаёт общий тип файлов в устанавливаемых каталогах. После этого место назначения задаётся автоматически: используется соответствующая переменная из
GNUInstallDirsили встроенное значение по умолчанию, если эта переменная не определена. Поддерживаемые типы файлов и соответствующие им переменные и встроенные значения по умолчанию приведены в таблице ниже. Вместо типа файла проекты могут указать аргументDESTINATION, если хотят явно задать место установки.Аргумент
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>/docLIBEXEC${CMAKE_INSTALL_LIBEXECDIR}libexecОбратите внимание, что в некоторых встроенных значениях по умолчанию для типов в качестве префикса используется каталог
DATAROOT. ПрефиксDATAROOTвычисляется аналогично типам: в качестве переменной используетсяCMAKE_INSTALL_DATAROOTDIR, а в качестве встроенного значения по умолчанию —share. Нельзя использоватьDATAROOTв качестве параметраTYPE; вместо него используйтеDATA.Добавлено в версии 3.31: Тип
LIBEXEC. -
DESTINATION <dir> -
Каталог назначения, описанный в разделе общие параметры.
Чтобы пакеты соответствовали политикам дистрибутивов в отношении структуры файловой системы, если проектам необходимо указать
DESTINATION, настоятельно рекомендуется использовать путь, начинающийся с соответствующей относительной переменнойGNUInstallDirs. Это позволяет сопровождающим пакетов управлять местом установки, задавая соответствующие переменные кэша.Добавлено в версии 3.4: В месте назначения
<dir>можно использовать «генераторные выражения» с синтаксисом$<...>. Доступные выражения описаны в руководствеcmake-generator-expressions(7). -
FILE_PERMISSIONS <permission>... -
Задаёт права для файлов в месте назначения; названия
<permission>описаны в разделе общие параметры. -
DIRECTORY_PERMISSIONS <permission>... -
Задаёт права для каталогов в месте назначения; названия
<permission>описаны в разделе общие параметры. -
USE_SOURCE_PERMISSIONS -
Если этот параметр задан, а
FILE_PERMISSIONS— нет, права для файлов будут скопированы из структуры исходных каталогов. -
MESSAGE_NEVER -
Добавлено в версии 3.1.
Отключает вывод состояния установки файлов.
-
FILES_MATCHING -
Этот параметр можно указать перед первым
<match-rule>, чтобы отключить установку файлов (но не каталогов), не соответствующих ни одному выражению. Например, следующий кодinstall(DIRECTORY src/ DESTINATION doc/myproj FILES_MATCHING PATTERN "*.png")извлечёт и установит изображения из дерева исходных файлов.
-
<match-rule> <match-option>... -
Управлять установкой каталогов можно с высокой точностью с помощью правил, соответствующих каталогам или файлам, обнаруженным во входных каталогах. Их можно использовать для применения определённых параметров (см. ниже) к подмножеству обнаруженных файлов и каталогов. Все файлы и каталоги устанавливаются независимо от того, соответствуют ли они правилам, если не задан приведённый выше параметр
FILES_MATCHING.Полный путь к каждому входному файлу или каталогу, с прямыми косыми чертами, можно сопоставить с помощью
<match-rule>:-
PATTERN <pattern> -
Сопоставляет полные имена файлов с шаблоном поиска. Часть полного пути, соответствующая шаблону, должна находиться в конце имени файла и предваряться косой чертой (которая не входит в шаблон).
-
REGEX <regex> -
Сопоставляет любую часть полного пути к файлу с помощью регулярного выражения. Для ограничения сопоставления концом пути можно использовать
/и$.
За каждым
<match-rule>могут следовать аргументы<match-option>. Параметры сопоставления применяются к файлам или каталогам, соответствующим правилу. Доступны следующие параметры сопоставления:-
EXCLUDE -
Исключает соответствующий файл или каталог из установки.
-
PERMISSIONS <permission>... -
Переопределяет настройку прав для соответствующего файла или каталога.
Например, следующий код
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будут исключены. -
-
-
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(PACKAGE_INFO <package-name> [...]) -
Добавлено в версии 4.3.
Устанавливает файл Common Package Specification («CPS»), экспортирующий цели для зависимых проектов:
install(PACKAGE_INFO <package-name> EXPORT <export-name> [PROJECT <project-name>|NO_PROJECT_METADATA] [APPENDIX <appendix-name>] [DESTINATION <dir>] [LOWER_CASE_FILE] [VERSION <version> [COMPAT_VERSION <version>] [VERSION_SCHEMA <string>]] [DEFAULT_TARGETS <target>...] [DEFAULT_CONFIGURATIONS <config>...] [LICENSE <license-string>] [DEFAULT_LICENSE <license-string>] [DESCRIPTION <description-string>] [HOMEPAGE_URL <url-string>] [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [CXX_MODULES_DIRECTORY <directory>] [COMPONENT <component>] [EXCLUDE_FROM_ALL])Форма
PACKAGE_INFOсоздает и устанавливает файл Common Package Specification, описывающий установленные цели, чтобы их можно было использовать в другом проекте. Установки целей связываются с экспортом<export-name>с помощью параметраEXPORTсигнатурыinstall(TARGETS), описанной выше. В отличие отinstall(EXPORT), эта информация не представлена в коде CMake и может использоваться другими инструментами. При импорте в другой проект CMake импортированные цели будут иметь префикс<package-name>::. По умолчанию созданный файл будет называться<package-name>[-<appendix-name>].cps. Если заданоLOWER_CASE_FILE, имя пакета в файловой системе (как в имени файла, так и в пути установки) сначала будет преобразовано в нижний регистр.Если
DESTINATIONне указан, используется платформозависимое значение по умолчанию.Для указания метаданных пакета можно использовать несколько параметров:
-
VERSION <version> -
Версия пакета.
<version>должен соответствовать указанной схеме. Подробнее о том, как используется версия пакета при запросе пакета потребителями, см. в разделе Выбор версии (CPS). -
COMPAT_VERSION <version> -
Самая ранняя версия, с которой пакет обеспечивает совместимость.
Если не указано,
COMPAT_VERSIONнеявно считается равнымVERSIONпакета, то есть обратная совместимость не обеспечивается. -
VERSION_SCHEMA <schema> -
Схема, которой следуют номера версий пакета (как
VERSION, так иCOMPAT_VERSION). Если этот параметр не указан, в файл.cpsсхема не записывается, однако спецификация CPS указывает, что в таких случаях предполагается схемаsimple. Подробнее см. в разделеversion_schema, где также приведен список официально поддерживаемых схем. Учтите, что спецификация может включать схемы, не поддерживаемые CMake. Список схем, поддерживаемых командойfind_package(), см. в разделе Выбор версии (CPS).
DEFAULT_TARGETS <target>...Цели, используемые, если потребитель запрашивает связывание с именем пакета, а не с отдельными компонентами.
DEFAULT_CONFIGURATIONS <config>...Упорядоченный список конфигураций, которым потребителям следует отдавать предпочтение, если точное соответствие или сопоставление конфигурации потребителя с доступными конфигурациями пакета отсутствует. Если список не указан, CMake будет использовать доступные конфигурации пакета в неопределенном порядке.
-
LICENSE <license-string> -
Добавлено в версии 4.2.
System Package Data Exchange (SPDX) выражение лицензии, описывающее лицензии проекта в целом, включая документацию, ресурсы и другие материалы, распространяемые вместе с проектом, помимо программных артефактов. Список часто используемых лицензий и их идентификаторов см. в списке лицензий SPDX.
Лицензия отдельных компонентов берется из свойства
SPDX_LICENSEсоответствующих целей. -
DEFAULT_LICENSE <license-string> -
Добавлено в версии 4.2.
System Package Data Exchange (SPDX) выражение лицензии, описывающее лицензии компонентов, для которых лицензии не указаны иным образом.
-
DESCRIPTION <description-string> -
Добавлено в версии 4.1.
Информационное описание проекта. Рекомендуется, чтобы это описание было относительно коротким — обычно не более нескольких слов.
-
HOMEPAGE_URL <url-string> -
Добавлено в версии 4.1.
Информационный канонический URL-адрес домашней страницы проекта.
По умолчанию, если указанное
<package-name>совпадает с текущим значением CMakePROJECT_NAME, метаданные пакета наследуются от проекта. ПараметрPROJECT <project-name>можно использовать, чтобы указать другой проект, от которого следует наследовать метаданные. Если указан параметрNO_PROJECT_METADATA, автоматическое наследование метаданных пакета отключается. В любом случае значения метаданных, указанные в командеinstall, имеют приоритет.Если указан параметр
APPENDIX, вместо создания спецификации пакета верхнего уровня указанные цели будут экспортированы как приложение к именованному пакету. Приложения можно использовать для отделения менее часто используемых целей (и их внешних зависимостей) от остальной части пакета. Это позволяет потребителям игнорировать транзитивные зависимости для неиспользуемых ими целей, а также дает возможность составить единый логический «пакет» из артефактов, созданных несколькими деревьями сборки.Приложениям запрещено изменять основные метаданные пакета; поэтому параметры
PROJECT,VERSION,COMPAT_VERSION,VERSION_SCHEMA,DEFAULT_TARGETSиDEFAULT_CONFIGURATIONSнельзя указывать вместе сAPPENDIX. Кроме того, настоятельно рекомендуется единообразно использоватьLOWER_CASE_FILEв основном пакете и всех приложениях.Примечание
Поскольку CPS предназначен для переносимости между разными инструментами сборки, он может не поддерживать все возможности, доступные при экспорте с помощью скриптов CMake. В частности, в настоящее время поддержка генераторных выражений в свойствах интерфейса ограничена выражениями, зависящими от конфигурации.
Примечание
Это рекомендуемый способ создания информации о пакетах Common Package Specification для проекта. Для дистрибьюторов, чьим пользователям может потребоваться информация о пакетах CPS, изменение файлов сборки проекта может быть непрактичным; в таком случае переменную
CMAKE_INSTALL_EXPORTS_AS_PACKAGE_INFOможно использовать для создания файлов.cpsиз вызововinstall(EXPORT). Сведения об использовании и ограничениях см. в документации переменной. -
-
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, а на платформах без DLL — в место назначенияLIBRARYи компонент. Фреймворки 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(), не определен.
-
install(SBOM <sbom-name> [...]) -
Добавлено в версии 4.3.
Примечание
Экспериментальная возможность. Включается параметром
CMAKE_EXPERIMENTAL_GENERATE_SBOM.Устанавливает ведомость программных материалов («SBOM»), описывающую проект:
install(SBOM <sbom-name> EXPORTS <export-names>... [PROJECT <project-name>|NO_PROJECT_METADATA] [DESTINATION <dir>] [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [LICENSE <license-string>] [DESCRIPTION <description-string>] [HOMEPAGE_URL <url-string>] [PACKAGE_URL <url-string>] [FORMAT <string>])Форма
SBOMсоздает файл ведомости программных материалов («SBOM») для указанного проекта и устанавливает его вместе с проектом. Ведомость программных материалов — это машиночитаемое описание целей проекта, связанных библиотек и связанных с ними метаданных, например версий и сведений о лицензиях. В настоящее время CMake создает файлы SBOM в соответствии со спецификацией System Package Data Exchange 3.0 в представлении JSON-LD, выбранном параметромFORMAT; интерфейс при этом разработан с учетом поддержки дополнительных форматов SBOM и версий схем в будущих выпусках CMake.Установки целей связываются с каждым набором экспортов
<export-names>в спискеEXPORTSс помощью параметраEXPORTSсигнатурыinstall(TARGETS), описанной выше. Одна ведомость SBOM может охватывать несколько наборов экспортов; цели из всех перечисленных экспортов объединяются в один документ. ЕслиDESTINATIONне указан, используется платформозависимое значение по умолчанию.Для указания метаданных пакета можно использовать несколько параметров:
-
VERSION <version> -
Версия пакета, заданная последовательностью неотрицательных целочисленных компонентов, то есть <major>[.<minor>[.<patch>[.<tweak>]]]. Подробнее см. в документации
project(VERSION). -
FORMAT <string> -
Формат экспорта SBOM, который должен быть выражением вида
<format>[-<version>][+<representation>]. В настоящее время CMake поддерживает сериализацию JSON-LD для System Package Data Exchange v3.0.1 (spdxилиspdx-3.0.1+json); этот формат также используется по умолчанию, еслиFORMATне указан.
HOMEPAGE_URL <url-string>Информационный канонический URL-адрес домашней страницы проекта.
PACKAGE_URL <url-string>Информационный канонический URL-адрес пакета проекта.
LICENSE <license-string>System Package Data Exchange (SPDX) выражение лицензии, описывающее лицензии проекта в целом, включая документацию, ресурсы и другие материалы, распространяемые вместе с проектом, помимо программных артефактов. Список часто используемых лицензий и их идентификаторов см. в списке лицензий SPDX.
Лицензия отдельных компонентов берется из свойства
SPDX_LICENSEсоответствующих целей.DESCRIPTION <description-string>Информационное описание проекта. Рекомендуется, чтобы это описание было относительно коротким — обычно не более нескольких слов.
По умолчанию, если указанное
<sbom-name>совпадает с текущим значением CMakePROJECT_NAME, метаданные SBOM наследуются от проекта. ПараметрPROJECT <project-name>можно использовать, чтобы указать другой проект, от которого следует наследовать метаданные. Если указан параметрNO_PROJECT_METADATA, автоматическое наследование метаданных SBOM отключается. В любом случае значения метаданных, указанные в командеinstall, имеют приоритет.Обратите внимание, что для целей, в свойствах
LINK_LIBRARIESилиINTERFACE_LINK_LIBRARIESкоторых содержатся генераторные выражения, создать файл SBOM нельзя, если только эти выражения не защищены с помощьюLINK_ONLY. -
Примеры
Пример: установка целей с компонентами для каждого типа артефакта
Рассмотрим проект, в котором определены цели с разными типами артефактов:
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–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/install.html