Spec-Zone.ru › CMake 3.31

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, см. ниже).
LIBRARY

Целевые артефакты этого типа включают:

  • Общие библиотеки, кроме

    • DLL (они попадают в RUNTIME, см. ниже),
    • на macOS, когда помечены как FRAMEWORK (см. ниже).
RUNTIME

Целевые артефакты этого типа включают:

  • Исполняемые файлы (кроме macOS, когда помечены как MACOSX_BUNDLE, см. BUNDLE ниже);
  • DLL (на всех системах на базе Windows, включая Cygwin; обратите внимание, что сопровождающие импортируемые библиотеки относятся к типу ARCHIVE).
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}

bin

LIBRARY

${CMAKE_INSTALL_LIBDIR}

lib

ARCHIVE

${CMAKE_INSTALL_LIBDIR}

lib

PRIVATE_HEADER

${CMAKE_INSTALL_INCLUDEDIR}

include

PUBLIC_HEADER

${CMAKE_INSTALL_INCLUDEDIR}

include

FILE_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):

  • DIRECTORIES
  • PRE_INCLUDE_REGEXES
  • PRE_EXCLUDE_REGEXES
  • POST_INCLUDE_REGEXES
  • POST_EXCLUDE_REGEXES
  • POST_INCLUDE_FILES
  • POST_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 и CFBundles BUNDLE). Например, заголовки и библиотеки импорта, связанные с DLL, не устанавливаются. В случае с библиотеками FRAMEWORK, исполняемыми файлами MACOSX_BUNDLE и CFBundles BUNDLE устанавливается вся директория.

Опция 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}

bin

SBIN

${CMAKE_INSTALL_SBINDIR}

sbin

LIB

${CMAKE_INSTALL_LIBDIR}

lib

INCLUDE

${CMAKE_INSTALL_INCLUDEDIR}

include

SYSCONF

${CMAKE_INSTALL_SYSCONFDIR}

etc

SHAREDSTATE

${CMAKE_INSTALL_SHARESTATEDIR}

com

LOCALSTATE

${CMAKE_INSTALL_LOCALSTATEDIR}

var

RUNSTATE

${CMAKE_INSTALL_RUNSTATEDIR}

<LOCALSTATE dir>/run

DATA

${CMAKE_INSTALL_DATADIR}

<DATAROOT dir>

INFO

${CMAKE_INSTALL_INFODIR}

<DATAROOT dir>/info

LOCALE

${CMAKE_INSTALL_LOCALEDIR}

<DATAROOT dir>/locale

MAN

${CMAKE_INSTALL_MANDIR}

<DATAROOT dir>/man

DOC

${CMAKE_INSTALL_DOCDIR}

<DATAROOT dir>/doc

LIBEXEC

${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}

bin

SBIN

${CMAKE_INSTALL_SBINDIR}

sbin

LIB

${CMAKE_INSTALL_LIBDIR}

lib

INCLUDE

${CMAKE_INSTALL_INCLUDEDIR}

include

SYSCONF

${CMAKE_INSTALL_SYSCONFDIR}

etc

SHAREDSTATE

${CMAKE_INSTALL_SHARESTATEDIR}

com

LOCALSTATE

${CMAKE_INSTALL_LOCALSTATEDIR}

var

RUNSTATE

${CMAKE_INSTALL_RUNSTATEDIR}

<LOCALSTATE dir>/run

DATA

${CMAKE_INSTALL_DATADIR}

<DATAROOT dir>

INFO

${CMAKE_INSTALL_INFODIR}

<DATAROOT dir>/info

LOCALE

${CMAKE_INSTALL_LOCALEDIR}

<DATAROOT dir>/locale

MAN

${CMAKE_INSTALL_MANDIR}

<DATAROOT dir>/man

DOC

${CMAKE_INSTALL_DOCDIR}

<DATAROOT dir>/doc

LIBEXEC

${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>)?, когда политика 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() записываются в следующем порядке:

  1. Любые зависимости пакетов, которые были перечислены в export(SETUP), записываются в том порядке, в котором они были указаны впервые, независимо от того, содержат ли они зависимости INTERFACE экспортируемых целей.
  2. Любые зависимости пакетов, содержащие зависимости 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API