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() в каталоге исходных кодов, выполняются в порядке следования во время установки.
Изменено в версии 3.14: Правила установки в подкаталогах, добавленные вызовами команды add_subdirectory(), чередуются с правилами в родительском каталоге для выполнения в порядке объявления (см. политику CMP0082).
Изменено в версии 3.22: Переменная среды CMAKE_INSTALL_MODE может переопределять поведение по умолчанию копирования install().
Изменено в версии 3.31: Проекты могут включить INSTALL_PARALLEL для включения параллельной установки. При использовании параллельной установки подкаталоги, добавленные вызовами команды add_subdirectory(), устанавливаются независимо, и порядок выполнения правил установки, добавленных в различные подкаталоги, не гарантируется.
Существует несколько подписей для этой команды. Некоторые из них определяют параметры установки для файлов и целей. Общие параметры для нескольких подписей описаны здесь, но они действительны только для подписей, которые их указывают. Общие параметры:
-
DESTINATION <dir> -
Укажите каталог на диске, в который будет установлен файл.
<dir>должен быть относительным путем. Абсолютный путь разрешен, но не рекомендуется.Если задан относительный путь, он интерпретируется относительно значения переменной
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>... -
Укажите список конфигураций сборки, к которым относится правило установки (Отладка, Релиз и т. д.).
Если этот параметр используется несколько раз в одном вызове, его список конфигураций накапливается. Если вызов
install(TARGETS)использует аргументы <artifact-kind>, отдельный список конфигураций накапливается для каждого типа артефакта. -
COMPONENT <component> -
Укажите имя компонента установки, с которым связано правило установки, например,
RuntimeилиDevelopment. Во время установки, специфичной для компонента, будут выполняться только правила установки, связанные с заданным именем компонента. Во время полной установки устанавливаются все компоненты, если не отмечены какEXCLUDE_FROM_ALL. ЕслиCOMPONENTне задан, создается компонент по умолчанию "Unspecified". Имя компонента по умолчанию можно контролировать с помощью переменнойCMAKE_INSTALL_DEFAULT_COMPONENT_NAME. -
EXCLUDE_FROM_ALL -
Добавлена в версии 3.6.
Укажите, что файл исключается из полной установки и устанавливается только в рамках установки, специфичной для компонента.
-
OPTIONAL -
Укажите, что не является ошибкой, если устанавливаемый файл не существует.
Добавлена в версии 3.1: Подписи команд, устанавливающие файлы, могут выводить сообщения во время установки. Используйте переменную CMAKE_INSTALL_MESSAGE, чтобы контролировать вывод сообщений.
Добавлена в версии 3.11: Многие варианты install() неявно создают каталоги, содержащие установленные файлы. Если CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS задано, эти каталоги будут созданы с указанными правами. В противном случае они будут созданы в соответствии с правилами uname на платформах Unix-подобных системах. Платформы Windows не затронуты.
Подписи
-
install(TARGETS <target>... [...]) -
Установить целевой Выходные артефакты и связанные файлы:
install(TARGETS <target>... [EXPORT <export-name>] [RUNTIME_DEPENDENCIES <arg>...|RUNTIME_DEPENDENCY_SET <set-name>] [<artifact-option>...] [<artifact-kind> <artifact-option>...]... [INCLUDES DESTINATION [<dir> ...]] )где
<artifact-option>...группа может содержать:[DESTINATION <dir>] [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [COMPONENT <component>] [NAMELINK_COMPONENT <component>] [OPTIONAL] [EXCLUDE_FROM_ALL] [NAMELINK_ONLY|NAMELINK_SKIP]
Первая
<artifact-option>...группа применяется к целевым Выходным артефактам, для которых не указана отдельная группа позже в том же вызове.Каждая
<artifact-kind> <artifact-option>...группа применяется к Выходным артефактам указанного типа артефакта:-
ARCHIVE -
Целевые артефакты этого типа включают:
-
Статические библиотеки (кроме macOS, если помечены как
FRAMEWORK, см. ниже); -
DLL-импортируемые библиотеки (на всех системах на основе Windows, включая Cygwin; они имеют расширение
.lib, в отличие от библиотек.dllкоторые попадают вRUNTIME); - На AIX, файл импорта компоновщика, созданный для исполняемых файлов с включенным
ENABLE_EXPORTS. - На macOS, файл импорта компоновщика, созданный для общих библиотек с включенным
ENABLE_EXPORTS(кроме случаев, когда помечены какFRAMEWORK, см. ниже).
-
Статические библиотеки (кроме macOS, если помечены как
-
LIBRARY -
Целевые артефакты этого типа включают:
-
Общие библиотеки, кроме
- DLL (они попадают в
RUNTIME, см. ниже), - на macOS, когда помечены как
FRAMEWORK(см. ниже).
- DLL (они попадают в
-
-
RUNTIME -
Целевые артефакты этого типа включают:
-
Исполняемые файлы (кроме macOS, когда помечены как
MACOSX_BUNDLE, см.BUNDLEниже); - DLL (на всех системах на базе Windows, включая Cygwin; обратите внимание, что сопровождающие импортируемые библиотеки относятся к типу
ARCHIVE).
-
Исполняемые файлы (кроме macOS, когда помечены как
-
OBJECTS -
Добавлен в версии 3.9.
Объектные файлы, связанные с библиотеками объектов.
-
FRAMEWORK -
Как статические, так и общие библиотеки, помеченные свойством
FRAMEWORK, обрабатываются какFRAMEWORKцелевые объекты на macOS. -
BUNDLE -
Исполняемые файлы, помеченные свойством
MACOSX_BUNDLE, обрабатываются какBUNDLEцелевые объекты на macOS. -
PUBLIC_HEADER -
Любые файлы
PUBLIC_HEADER, связанные с библиотекой, устанавливаются в указанный аргументомPUBLIC_HEADERкаталог на платформах, не являющихся Apple. Правила, определённые этим аргументом, игнорируются для библиотекFRAMEWORKна платформах Apple, поскольку связанные файлы устанавливаются в соответствующие места внутри папки фреймворка. Подробности см. вPUBLIC_HEADER. -
PRIVATE_HEADER -
Аналогично
PUBLIC_HEADER, но для файловPRIVATE_HEADER. Подробности см. вPRIVATE_HEADER. -
RESOURCE -
Аналогично
PUBLIC_HEADERиPRIVATE_HEADER, но для файловRESOURCE. Подробности см. вRESOURCE. -
FILE_SET <set-name> -
Добавлен в версии 3.23.
Наборы файлов определяются командой
target_sources(FILE_SET). Если набор файлов<set-name>существует и являетсяPUBLICилиINTERFACE, все файлы в наборе устанавливаются в указанный каталог назначения (см. ниже). Структура каталогов, относительная к базовым каталогам набора файлов, сохраняется. Например, файл, добавленный в набор файлов как/blah/include/myproj/here.hс базовым каталогом/blah/include, будет установлен вmyproj/here.hниже каталога назначения. -
CXX_MODULES_BMI -
Добавлен в версии 3.28.
Все файлы модулей из C++ модулей из
PUBLICисточников в наборе файлов типаCXX_MODULESбудут установлены в указанномDESTINATION. Все модули размещаются непосредственно в каталоге назначения, так как структура каталогов не выводится из имён модулей. ПустойDESTINATIONможет быть использован для подавления установки этих файлов (для использования в общем коде).
Для обычных исполняемых файлов, статических и общих библиотек аргумент
DESTINATIONне требуется. Для этих типов целевых объектов, когдаDESTINATIONопущен, каталог назначения будет взят из соответствующей переменной изGNUInstallDirs, или установлен в встроенное значение по умолчанию, если эта переменная не определена. То же самое относится к наборам файлов, а также к общедоступным и закрытым заголовкам, связанным с установленными целевыми объектами через свойства целевых объектовPUBLIC_HEADERиPRIVATE_HEADER. Каталог назначения всегда должен быть указан для библиотек модулей, пакетов Apple и фреймворков. Каталог назначения может быть опущен для интерфейсных и объектных библиотек, но они обрабатываются по-другому (см. обсуждение этого вопроса в конце этого раздела).Для общих библиотек на платформах DLL, если не указаны каталоги назначения
RUNTIMEиARCHIVE, оба компонентаRUNTIMEиARCHIVEустанавливаются в каталоги назначения по умолчанию. Если указан каталог назначенияRUNTIMEилиARCHIVE, компонент устанавливается в этот каталог, а другой компонент не устанавливается. Если указаны каталоги назначенияRUNTIMEиARCHIVE, оба компонента устанавливаются в свои соответствующие каталоги назначения.В следующей таблице показаны типы целевых объектов с соответствующими переменными и значениями по умолчанию, которые применяются, когда каталог назначения не указан:
Тип целевого объекта
Переменная GNUInstallDirs
Встроенное значение по умолчанию
RUNTIME${CMAKE_INSTALL_BINDIR}binLIBRARY${CMAKE_INSTALL_LIBDIR}libARCHIVE${CMAKE_INSTALL_LIBDIR}libPRIVATE_HEADER${CMAKE_INSTALL_INCLUDEDIR}includePUBLIC_HEADER${CMAKE_INSTALL_INCLUDEDIR}includeFILE_SET(типHEADERS)${CMAKE_INSTALL_INCLUDEDIR}includeПроекты, желающие следовать общепринятой практике установки заголовков в подкаталог проекта, могут предпочесть использовать наборы файлов с соответствующими путями и базовыми каталогами. В противном случае, они должны указать
DESTINATION, вместо того, чтобы полагаться на вышеуказанное (см. следующий пример ниже).Для соблюдения политики размещения файлов в дистрибутивах, если проекты должны указать
DESTINATION, настоятельно рекомендуется использовать путь, начинающийся с соответствующей относительной переменнойGNUInstallDirs. Это позволяет администраторам пакетов управлять каталогом установки путём настройки соответствующих переменных кэша. Следующий пример показывает установку статической библиотеки в каталог назначения по умолчанию, предоставленныйGNUInstallDirs, но с установкой заголовков в подкаталог проекта, не используя наборы файлов:add_library(mylib STATIC ...) set_target_properties(mylib PROPERTIES PUBLIC_HEADER mylib.h) include(GNUInstallDirs) install(TARGETS mylib PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj )В дополнение к общим параметрам, перечисленным выше, каждый целевой объект может принимать следующие дополнительные аргументы:
-
-
NAMELINK_COMPONENT -
Добавлен в версии 3.12.
На некоторых платформах версия библиотеки общего использования имеет символическую ссылку, например:
lib<name>.so -> lib<name>.so.1
где
lib<name>.so.1— имя библиотеки, аlib<name>.so— «имя ссылки», позволяющее компоновщикам находить библиотеку при указании-l<name>. ПараметрNAMELINK_COMPONENTаналогичен параметруCOMPONENT, но он изменяет компонент установки имени ссылки разделяемой библиотеки, если она сгенерирована. Если не указано, по умолчанию используется значениеCOMPONENT. Использование этого параметра вне блокаLIBRARYявляется ошибкой.Изменено в версии 3.27: Этот параметр также может использоваться в блоке
ARCHIVEдля управления создаваемым на macOS файлом импорта компоновщика для разделяемых библиотек с включённымENABLE_EXPORTS.Пример использования
NAMELINK_COMPONENTприведен в разделе Пример: Установка целей с компонентами на основе артефактов.Этот параметр обычно используется для систем управления пакетами, которые имеют отдельные пакеты времени выполнения и разработки. Например, на системах Debian библиотека, как ожидается, находится в пакете времени выполнения, а заголовки и имя ссылки — в пакете разработки.
Подробную информацию о создании разделяемых библиотек с версиями см. в свойствах целевых объектов
VERSIONиSOVERSION. -
NAMELINK_ONLY -
Этот параметр вызывает установку только имени ссылки при установке целевого объекта библиотеки. На платформах, где версия разделяемой библиотеки не имеет имени ссылки или когда библиотека не имеет версии, параметр
NAMELINK_ONLYничего не устанавливает. Использование этого параметра вне блокаLIBRARYявляется ошибкой.Изменено в версии 3.27: Этот параметр также может использоваться в блоке
ARCHIVEдля управления создаваемым на macOS файлом импорта компоновщика для разделяемых библиотек с включённымENABLE_EXPORTS.При использовании
NAMELINK_ONLY, для указания компонента установки имени ссылки можно использоватьNAMELINK_COMPONENTилиCOMPONENT, ноCOMPONENTпредпочтительнее. -
NAMELINK_SKIP -
Аналогично
NAMELINK_ONLY, но имеет обратный эффект: вызывает установку файлов библиотеки, отличных от имени ссылки, при установке целевого объекта библиотеки. Если не указаны ниNAMELINK_ONLY, ниNAMELINK_SKIP, устанавливаются обе части. На платформах, где версия разделяемой библиотеки не имеет символических ссылок или когда библиотека не имеет версии,NAMELINK_SKIPустанавливает библиотеку. Использование этого параметра вне блокаLIBRARYявляется ошибкой.Изменено в версии 3.27: Этот параметр также может использоваться в блоке
ARCHIVEдля управления создаваемым на macOS файлом импорта компоновщика для разделяемых библиотек с включённымENABLE_EXPORTS.Если указан
NAMELINK_SKIP,NAMELINK_COMPONENTне имеет эффекта. Не рекомендуется использоватьNAMELINK_SKIPсовместно сNAMELINK_COMPONENT.
Команда
install(TARGETS)также может принимать следующие параметры на верхнем уровне:-
EXPORT -
Этот параметр связывает установленные файлы целевых объектов с экспортом, называемым
<export-name>. Он должен предшествовать любым параметрам целевых объектов. Для фактической установки файла экспорта вызовитеinstall(EXPORT), документация которой приведена ниже. Смотрите документацию свойства целевого объектаEXPORT_NAMEдля изменения имени экспортируемого целевого объекта.Если используется
EXPORT, а целевые объекты включают наборы файловPUBLICилиINTERFACE, все они должны быть указаны с аргументамиFILE_SET. Все наборы файловPUBLICилиINTERFACEцелевых объектов включаются в экспорт. -
INCLUDES DESTINATION -
Этот параметр указывает список каталогов, которые будут добавлены в свойство целевого объекта
INTERFACE_INCLUDE_DIRECTORIESцелевого объекта<targets>при экспорте командойinstall(EXPORT). Если указан относительный путь, он обрабатывается как относительный к$<INSTALL_PREFIX>.В отличие от других аргументов
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имеют такое же семантическое значение, как и в режиме ЦЕЛЕЙ. Устанавливаются только исполняемые файлы зависимостей импортированных целей (кроме случаев с библиотеками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)для получения доступных выражений. Однако, если любой элемент начинается с генераторного выражения, он должен вычисляться в полный путь.Необязательный аргумент
RENAME <name>используется для указания имени установленного файла, отличного от исходного имени файла. Переименование разрешено только при установке одного файла командой.Должен быть указан либо аргумент
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>/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 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>/docLIBEXEC${CMAKE_INSTALL_LIBEXECDIR}libexecОбратите внимание, что некоторые встроенные стандартные варианты типов используют каталог
DATAROOTв качестве префикса. ПрефиксDATAROOTвычисляется аналогично типам, при этомCMAKE_INSTALL_DATAROOTDIR— переменная, аshare— встроенный стандартный вариант. Вы не можете использоватьDATAROOTкак параметрTYPE; используйтеDATAвместо него.Для соответствия политике структуры файловой системы дистрибутивов, если проектам необходимо указать
DESTINATION, настоятельно рекомендуется использовать путь, начинающийся с соответствующей относительной переменнойGNUInstallDirs. Это позволяет администраторам пакетов управлять местом установки, задавая соответствующие переменные кэша.Добавлен в версии 3.4: Место установки, указанное как аргумент
DESTINATION, может использовать "выражения генератора" с синтаксисом$<...>. См. руководствоcmake-generator-expressions(7)для доступных выражений.Добавлен в версии 3.5: Список
dirs..., переданныйDIRECTORY, также может использовать "выражения генератора".Добавлен в версии 3.31: Аргумент
TYPEтеперь поддерживает типLIBEXEC.
-
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>)?, когда политикаCMP0022NEW.Примечание
Установленный файл
<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. Внешний проект может загрузить этот файл с помощью команды включения и использовать исполняемый файлmyexeиз дерева установки с помощью имени импортированной целиmp_myexe, как если бы цель была построена в своём собственном дереве. -
-
install(PACKAGE_INFO <package-name> [...]) -
Добавлен в версии 3.31.
Примечание
Экспериментальный. Управляется
CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_INFO.Устанавливает файл Common Package Specification, экспортирующий цели для зависимых проектов:
install(PACKAGE_INFO <package-name> EXPORT <export-name> [APPENDIX <appendix-name>] [DESTINATION <dir>] [LOWER_CASE_FILE] [VERSION <version> [COMPAT_VERSION <version>] [VERSION_SCHEMA <string>]] [DEFAULT_TARGETS <target>...] [DEFAULT_CONFIGURATIONS <config>...] [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [COMPONENT <component>] [EXCLUDE_FROM_ALL])Форма
PACKAGE_INFOгенерирует и устанавливает файл Common Package Specification, описывающий установленные цели таким образом, чтобы их мог использовать другой проект. Установки целей связаны с экспортом<export-name>с помощью параметраEXPORTподписиinstall(TARGETS), документированной выше. В отличие отinstall(EXPORT), эта информация не выражена в коде CMake и может быть использована инструментами помимо CMake. При импорте в другой проект CMake импортированные цели будут иметь префикс<package-name>::. По умолчанию сгенерированный файл будет называться<package-name>[-<appendix-name>].cps. Если указан параметрLOWER_CASE_FILE, имя пакета на диске (как в имени файла, так и в месте установки) сначала будет преобразовано в нижний регистр.Если параметр
DESTINATIONне указан, используется платформа-специфичный по умолчанию.Если параметр
APPENDIXуказан, вместо генерации спецификации пакета верхнего уровня, указанные цели будут экспортированы как приложение к указанному пакету. Приложения могут использоваться для разделения менее часто используемых целей (вместе с их внешними зависимостями) от остальной части пакета. Это позволяет потребителям игнорировать транзитивные зависимости для целей, которые они не используют, а также позволяет создать один логический «пакет» из артефактов, созданных в нескольких дереве сборки.Приложениям запрещено изменять основные метаданные пакета; поэтому, ни
VERSION, ниCOMPAT_VERSION, ниVERSION_SCHEMA, ниDEFAULT_TARGETSилиDEFAULT_CONFIGURATIONSне могут быть указаны в сочетании сAPPENDIX. Кроме того, настоятельно рекомендуется, чтобы использованиеLOWER_CASE_FILEбыло согласованным как в основном пакете, так и во всех приложениях.
-
install(RUNTIME_DEPENDENCY_SET <set-name> [...]) -
Добавлена в версии 3.21.
Устанавливает набор зависимостей во время выполнения:
install(RUNTIME_DEPENDENCY_SET <set-name> [[LIBRARY|RUNTIME|FRAMEWORK] [DESTINATION <dir>] [PERMISSIONS <permission>...] [CONFIGURATIONS <config>...] [COMPONENT <component>] [NAMELINK_COMPONENT <component>] [OPTIONAL] [EXCLUDE_FROM_ALL] ] [...] [PRE_INCLUDE_REGEXES <regex>...] [PRE_EXCLUDE_REGEXES <regex>...] [POST_INCLUDE_REGEXES <regex>...] [POST_EXCLUDE_REGEXES <regex>...] [POST_INCLUDE_FILES <file>...] [POST_EXCLUDE_FILES <file>...] [DIRECTORIES <dir>...] )Устанавливает набор зависимостей во время выполнения, предварительно созданный одной или несколькими командами
install(TARGETS)илиinstall(IMPORTED_RUNTIME_ARTIFACTS). Зависимости целевых объектов, входящих в набор зависимостей во время выполнения, устанавливаются в назначениеRUNTIMEи компонент на платформах DLL, и в назначениеLIBRARYи компонент на платформах, не являющихся DLL. Фреймворки macOS устанавливаются в назначениеFRAMEWORKи компонент. Целевые объекты, построенные в дереве сборки, никогда не будут установлены в качестве зависимостей во время выполнения, также как и их собственные зависимости, если сами целевые объекты не установлены с помощьюinstall(TARGETS).Сгенерированный скрипт установки вызывает
file(GET_RUNTIME_DEPENDENCIES)для файлов дерева сборки, чтобы рассчитать зависимости во время выполнения. Файлы исполняемых файлов дерева сборки передаются в качестве аргументаEXECUTABLES, файлы общих библиотек дерева сборки в качестве аргументаLIBRARIES, а модули дерева сборки в качестве аргументаMODULES. В macOS, если один из исполняемых файлов являетсяMACOSX_BUNDLE, этот исполняемый файл передаётся в качестве аргументаBUNDLE_EXECUTABLE. В наборе зависимостей во время выполнения macOS может быть не более одного такого файла пакета. СвойствоMACOSX_BUNDLEне влияет на другие платформы. Обратите внимание, чтоfile(GET_RUNTIME_DEPENDENCIES)поддерживает только сборку зависимостей во время выполнения для платформ Windows, Linux и macOS, поэтомуinstall(RUNTIME_DEPENDENCY_SET)имеет такое же ограничение.Следующие под-аргументы передаются в качестве соответствующих аргументов в
file(GET_RUNTIME_DEPENDENCIES)(для тех, которые предоставляют непустой список каталогов, регулярных выражений или файлов). Все они поддерживаютgenerator expressions.DIRECTORIES <dir>...PRE_INCLUDE_REGEXES <regex>...PRE_EXCLUDE_REGEXES <regex>...POST_INCLUDE_REGEXES <regex>...POST_EXCLUDE_REGEXES <regex>...POST_INCLUDE_FILES <file>...POST_EXCLUDE_FILES <file>...
Примечание
Эта команда заменяет команду install_targets() и свойства целевых объектов PRE_INSTALL_SCRIPT и POST_INSTALL_SCRIPT. Она также заменяет формы FILES команд install_files() и install_programs(). Порядок обработки этих правил установки по отношению к тем, сгенерированным командами install_targets(), install_files() и install_programs(), не определён.
Примеры
Пример: Установка целевых объектов с компонентами для каждого артефакта
Рассмотрим проект, который определяет целевые объекты с различными типами артефактов:
add_executable(myExe myExe.c) add_library(myStaticLib STATIC myStaticLib.c) target_sources(myStaticLib PUBLIC FILE_SET HEADERS FILES myStaticLib.h) add_library(mySharedLib SHARED mySharedLib.c) target_sources(mySharedLib PUBLIC FILE_SET HEADERS FILES mySharedLib.h) set_property(TARGET mySharedLib PROPERTY SOVERSION 1)
Мы можем вызвать install(TARGETS) с аргументами <artifact-kind>, чтобы указать разные параметры для каждого типа артефакта:
install(TARGETS
myExe
mySharedLib
myStaticLib
RUNTIME # Following options apply to runtime artifacts.
COMPONENT Runtime
LIBRARY # Following options apply to library artifacts.
COMPONENT Runtime
NAMELINK_COMPONENT Development
ARCHIVE # Following options apply to archive artifacts.
COMPONENT Development
DESTINATION lib/static
FILE_SET HEADERS # Following options apply to file set HEADERS.
COMPONENT Development
)
Это приведет к:
- Установке
myExeв<prefix>/bin, назначение по умолчанию для артефакта RUNTIME, в составе компонентаRuntime. -
На платформах, не являющихся DLL:
- Установке
libmySharedLib.so.1в<prefix>/lib, назначение по умолчанию для артефакта LIBRARY, в составе компонентаRuntime. - Установке
libmySharedLib.so«namelink» (символическая ссылка) в<prefix>/lib, назначение по умолчанию для артефакта LIBRARY, в составе компонентаDevelopment.
- Установке
-
На платформах DLL:
- Установке
mySharedLib.dllв<prefix>/bin, назначение по умолчанию для артефакта RUNTIME, в составе компонентаRuntime. - Установке
mySharedLib.libв<prefix>/lib/static, указанное назначение для артефакта ARCHIVE, в составе компонентаDevelopment.
- Установке
- Установке
myStaticLibв<prefix>/lib/static, указанное назначение для артефакта ARCHIVE, в составе компонентаDevelopment. - Установке
mySharedLib.hиmyStaticLib.hв<prefix>/include, назначение по умолчанию для набора файлов типа HEADERS, в составе компонентаDevelopment.
Пример: Установка целевых объектов в назначения для каждой конфигурации
Каждый вызов install(TARGETS) устанавливает заданный целевой объект артефакт вывода в не более чем одно DESTINATION, но само правило установки может быть отфильтровано параметром CONFIGURATIONS. Для установки в различное назначение для каждой конфигурации требуется по одному вызову на каждую конфигурацию. Например, код:
install(TARGETS myExe
CONFIGURATIONS Debug
RUNTIME
DESTINATION Debug/bin
)
install(TARGETS myExe
CONFIGURATIONS Release
RUNTIME
DESTINATION Release/bin
)
установит myExe в <prefix>/Debug/bin в конфигурации Debug и в <prefix>/Release/bin в конфигурации Release.
Сгенерированный скрипт установки
Примечание
Использование этой функции не рекомендуется. Пожалуйста, рассмотрите использование cmake --install вместо этого.
Команда install() генерирует файл cmake_install.cmake внутри каталога сборки, который используется в процессе установки сгенерированной цели и CPack. Вы также можете вызвать этот скрипт вручную с помощью cmake -P. Этот скрипт принимает несколько переменных:
-
COMPONENT -
Установите эту переменную, чтобы установить только один компонент CPack, а не все. Например, если вы хотите установить только компонент
Development, запуститеcmake -DCOMPONENT=Development -P cmake_install.cmake. -
BUILD_TYPE -
Установите эту переменную, чтобы изменить тип сборки, если вы используете генератор с несколькими конфигурациями. Например, чтобы установить с конфигурацией
Debug, запуститеcmake -DBUILD_TYPE=Debug -P cmake_install.cmake. -
DESTDIR -
Это переменная среды, а не переменная CMake. Она позволяет изменить префикс установки в системах UNIX. См.
DESTDIRдля подробностей.
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/command/install.html