Spec-Zone.ru › CMake 3.25

install

Укажите правила для выполнения во время установки.

Синтаксис

install(TARGETS <target>... [...])
install(IMPORTED_RUNTIME_ARTIFACTS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])
install(RUNTIME_DEPENDENCY_SET <set-name> [...])

Введение

Эта команда генерирует правила установки для проекта. Правила установки, заданные вызовами команды install() в каталоге исходных кодов, выполняются в порядке следования во время установки.

Изменено в версии 3.14: Правила установки в подкаталогах, добавленные вызовами команды add_subdirectory(), чередуются с правилами в родительском каталоге для выполнения в порядке объявления (см. политику CMP0082).

Изменено в версии 3.22: Переменная среды CMAKE_INSTALL_MODE может переопределить поведение по умолчанию копирования install().

Для этой команды существуют несколько вариантов синтаксиса. Некоторые из них определяют параметры установки для файлов и целей. Общие параметры для нескольких вариантов синтаксиса описаны здесь, но они действительны только для тех вариантов, которые их указывают. Общие параметры:

DESTINATION

Укажите каталог на диске, в который будет установлен файл. Аргументы могут быть относительными или абсолютными путями.

Если задан относительный путь, он интерпретируется относительно значения переменной CMAKE_INSTALL_PREFIX. Префикс может быть перемещен во время установки с помощью механизма DESTDIR описанного в документации переменной CMAKE_INSTALL_PREFIX.

Если задан абсолютный путь (с ведущей косой чертой или буквой диска), он используется дословно.

Поскольку абсолютные пути не поддерживаются генераторами установщиков cpack, предпочтительнее использовать относительные пути. В частности, нет необходимости делать пути абсолютными, добавляя CMAKE_INSTALL_PREFIX; этот префикс используется по умолчанию, если DESTINATION является относительным путем.

PERMISSIONS

Укажите разрешения для установленных файлов. Действительные разрешения — OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_WRITE, GROUP_EXECUTE, WORLD_READ, WORLD_WRITE, WORLD_EXECUTE, SETUID, и SETGID . Разрешения, которые не имеют смысла на определенных платформах, игнорируются на этих платформах.

CONFIGURATIONS

Укажите список конфигураций сборки, для которых применяется правило установки (Отладка, Релиз и т.д.). Обратите внимание, что значения, указанные для этого параметра, применяются только к параметрам, указанным ПОСЛЕ параметра CONFIGURATIONS. Например, чтобы установить отдельные пути установки для конфигураций Отладка и Релиз, сделайте следующее:

install(TARGETS target
        CONFIGURATIONS Debug
        RUNTIME DESTINATION Debug/bin)
install(TARGETS target
        CONFIGURATIONS Release
        RUNTIME DESTINATION Release/bin)

Обратите внимание, что CONFIGURATIONS появляется ДО RUNTIME DESTINATION.

COMPONENT

Укажите имя компонента установки, к которому привязано правило установки, например, Runtime или Development. Во время установки, специфичной для компонента, будут выполняться только правила установки, связанные с заданным именем компонента. Во время полной установки все компоненты устанавливаются, если они не помечены как EXCLUDE_FROM_ALL. Если COMPONENT не указан, создается компонент по умолчанию «Unspecified». Имя компонента по умолчанию можно контролировать с помощью переменной CMAKE_INSTALL_DEFAULT_COMPONENT_NAME.

EXCLUDE_FROM_ALL

Новое в версии 3.6.

Указывает, что файл исключается из полной установки и устанавливается только в рамках установки, специфичной для компонента.

RENAME

Укажите имя установленного файла, которое может отличаться от исходного файла. Переименование разрешено только при установке одного файла с помощью команды.

OPTIONAL

Указывает, что ошибка не возникает, если устанавливаемый файл не существует.

Новое в версии 3.1: Варианты команд, которые устанавливают файлы, могут выводить сообщения во время установки. Используйте переменную CMAKE_INSTALL_MESSAGE для управления выводимыми сообщениями.

Новое в версии 3.11: Многие из вариантов install() неявно создают каталоги, содержащие устанавливаемые файлы. Если CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS задано, эти каталоги будут созданы с указанными разрешениями. В противном случае они будут созданы в соответствии с правилами uname на платформах Unix-подобных системах. Платформы Windows не затронуты.

Установка целей

install(TARGETS targets... [EXPORT <export-name>]
        [RUNTIME_DEPENDENCIES args...|RUNTIME_DEPENDENCY_SET <set-name>]
        [[ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|
          PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE|FILE_SET <set-name>|CXX_MODULES_BMI]
         [DESTINATION <dir>]
         [PERMISSIONS permissions...]
         [CONFIGURATIONS [Debug|Release|...]]
         [COMPONENT <component>]
         [NAMELINK_COMPONENT <component>]
         [OPTIONAL] [EXCLUDE_FROM_ALL]
         [NAMELINK_ONLY|NAMELINK_SKIP]
        ] [...]
        [INCLUDES DESTINATION [<dir> ...]]
        )

Форма TARGETS задает правила установки целей из проекта. Существуют несколько типов целевых Выходные артефакты, которые могут быть установлены:

ARCHIVE

Артефакты целевых файлов этого типа включают:

  • Статические библиотеки (кроме macOS, когда помечены как FRAMEWORK, см. ниже);
  • DLL-импортные библиотеки (на всех системах на базе Windows, включая Cygwin; они имеют расширение .lib, в отличие от библиотек .dll , которые попадают в RUNTIME);
  • На AIX, файл импорта компоновщика, созданный для исполняемых файлов с включенным ENABLE_EXPORTS.
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>

Новое в версии 3.23.

Наборы файлов определяются командой target_sources(FILE_SET). Если набора файлов <set> существует и является PUBLIC или INTERFACE, все файлы в наборе устанавливаются в указанный пункт назначения (см. ниже). Структура каталогов относительно базовых каталогов набора файлов сохраняется. Например, файл, добавленный в набор файлов как /blah/include/myproj/here.h с базовым каталогом /blah/include , будет установлен в myproj/here.h ниже точки назначения.

CXX_MODULES_BMI

Примечание

Экспериментально. Включается CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API

Любые файлы модулей из 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 является ошибкой.

Рассмотрим следующий пример:

install(TARGETS mylib
        LIBRARY
          COMPONENT Libraries
          NAMELINK_COMPONENT Development
        PUBLIC_HEADER
          COMPONENT Development
       )

В этом сценарии, если вы выберите установить только Development компонент, как заголовки, так и имя ссылки будут установлены без библиотеки. (Если вы также не установите Libraries компонент, имя ссылки станет висящей символической ссылкой, и у проектов, которые ссылаются на библиотеку, возникнут ошибки сборки.) Если вы установите только Libraries компонент, будет установлена только библиотека без заголовков и имени ссылки.

Этот параметр обычно используется для менеджеров пакетов, которые имеют отдельные пакеты времени выполнения и разработки. Например, в системах Debian ожидается, что библиотека будет в пакете времени выполнения, а заголовки и имя ссылки — в пакете разработки.

См. свойства целевых объектов VERSION и SOVERSION для получения подробной информации о создании версионированных динамических библиотек.

NAMELINK_ONLY

Этот параметр вызывает установку только имени ссылки, когда устанавливается целевой объект библиотеки. На платформах, где версионированные динамические библиотеки не имеют имен ссылок или когда библиотека не версионирована, опция NAMELINK_ONLY ничего не устанавливает. Использование этого параметра за пределами блока LIBRARY является ошибкой.

Когда задано NAMELINK_ONLY, для указания компонента установки имени ссылки могут использоваться NAMELINK_COMPONENT или COMPONENT, но обычно предпочтительнее использовать COMPONENT.

NAMELINK_SKIP

Аналогично NAMELINK_ONLY, но имеет противоположный эффект: вызывает установку файлов библиотеки, кроме имени ссылки, при установке целевого объекта библиотеки. Когда не заданы ни NAMELINK_ONLY, ни NAMELINK_SKIP, устанавливаются обе части. На платформах, где версионированные динамические библиотеки не имеют символических ссылок или когда библиотека не версионирована, NAMELINK_SKIP устанавливает библиотеку. Использование этого параметра за пределами блока LIBRARY является ошибкой.

Если указано 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 при экспорте командой install(EXPORT). Если указан относительный путь, он рассматривается относительно $<INSTALL_PREFIX>.

RUNTIME_DEPENDENCY_SET

Новое в версии 3.21.

Этот параметр добавляет все зависимости во время выполнения установленных исполняемых файлов, динамических библиотек и модулей в указанный набор зависимостей во время выполнения. Этот набор затем может быть установлен с помощью команды install(RUNTIME_DEPENDENCY_SET).

Этот ключевой параметр и ключевой параметр RUNTIME_DEPENDENCIES взаимоисключающие.

RUNTIME_DEPENDENCIES

Новое в версии 3.21.

Этот параметр устанавливает все зависимости во время выполнения установленных исполняемых файлов, динамических библиотек и модулей вместе с самими целями. Аргументы RUNTIME, LIBRARY, FRAMEWORK, и общие аргументы используются для определения свойств (DESTINATION, COMPONENT, и т.д.) установки этих зависимостей.

RUNTIME_DEPENDENCIES семантически эквивалентно следующей паре вызовов:

install(TARGETS ... RUNTIME_DEPENDENCY_SET <set-name>)
install(RUNTIME_DEPENDENCY_SET <set-name> args...)

где <set-name> будет случайным образом сгенерированным именем набора. В args... могут быть включены любые из следующих ключевых слов, поддерживаемых командой 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 взаимоисключающие.

Один или несколько наборов свойств могут быть указаны в одном вызове формы TARGETS этой команды. Цель может быть установлена более одного раза в разные места. Рассмотрим гипотетические цели myExe, mySharedLib, и myStaticLib. Код:

install(TARGETS myExe mySharedLib myStaticLib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/static)
install(TARGETS mySharedLib DESTINATION /some/full/path)

установит myExe в <prefix>/bin и myStaticLib в <prefix>/lib/static. На платформах без DLL mySharedLib будет установлен в <prefix>/lib и /some/full/path. На платформах DLL библиотека mySharedLib будет установлена в <prefix>/bin и /some/full/path, а её библиотека импорта — в <prefix>/lib/static и /some/full/path.

Библиотеки интерфейса могут быть перечислены среди целей для установки. Они не устанавливают артефакты, но будут включены в связанный EXPORT. Если Объектные библиотеки перечислены, но не указано место назначения для их объектных файлов, они будут экспортированы как Библиотеки интерфейса. Этого достаточно для удовлетворения требований по транзитивному использованию другими целями, которые ссылаются на объектные библиотеки в их реализации.

Установка цели со свойством целевого файла EXCLUDE_FROM_ALL, установленным в TRUE, имеет неопределённое поведение.

Новое в версии 3.3: Место назначения установки, заданное как аргумент DESTINATION, может использовать «генераторные выражения» с синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений.

Новое в версии 3.13: install(TARGETS) может устанавливать цели, которые были созданы в других каталогах. При использовании таких правил установки между каталогами, выполнение make install (или аналогичного) из подкаталога не гарантирует, что цели из других каталогов являются актуальными. Можно использовать target_link_libraries() или add_dependencies(), чтобы убедиться, что такие цели из других каталогов построены до запуска подкаталог-специфических правил установки.

Установка импортированных артефактов времени выполнения

Новое в версии 3.21.

install(IMPORTED_RUNTIME_ARTIFACTS targets...
        [RUNTIME_DEPENDENCY_SET <set-name>]
        [[LIBRARY|RUNTIME|FRAMEWORK|BUNDLE]
         [DESTINATION <dir>]
         [PERMISSIONS permissions...]
         [CONFIGURATIONS [Debug|Release|...]]
         [COMPONENT <component>]
         [OPTIONAL] [EXCLUDE_FROM_ALL]
        ] [...]
        )

Форма IMPORTED_RUNTIME_ARTIFACTS задаёт правила установки артефактов времени выполнения импортированных целей. Проекты могут делать это, если они хотят объединить внешние исполняемые файлы или модули в свою установку. Аргументы LIBRARY, RUNTIME, FRAMEWORK, и BUNDLE имеют ту же семантику, что и в режиме TARGETS. Устанавливаются только артефакты времени выполнения импортированных целей (за исключением библиотек FRAMEWORK, исполняемых файлов MACOSX_BUNDLE и CFBundles BUNDLE). Например, заголовки и библиотеки импорта, связанные с DLL, не устанавливаются. В случае библиотек FRAMEWORK, исполняемых файлов MACOSX_BUNDLE и CFBundles BUNDLE устанавливается весь каталог.

Параметр RUNTIME_DEPENDENCY_SET добавляет артефакты времени выполнения импортированных исполняемых файлов, динамических библиотек и модульных библиотек targets в набор зависимостей во время выполнения <set-name>. Этот набор затем может быть установлен с помощью команды install(RUNTIME_DEPENDENCY_SET).

Установка файлов

Примечание

При установке заголовочных файлов рассмотрите использование наборов файлов, определённых с помощью target_sources(FILE_SET). Наборы файлов связывают заголовки с целью, и они устанавливаются как часть цели.

install(<FILES|PROGRAMS> files...
        TYPE <type> | DESTINATION <dir>
        [PERMISSIONS permissions...]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>]
        [RENAME <name>] [OPTIONAL] [EXCLUDE_FROM_ALL])

Форма FILES задаёт правила установки файлов для проекта. Имена файлов, заданные как относительные пути, интерпретируются относительно текущего каталога исходных файлов. Файлы, установленные этой формой, по умолчанию получают права OWNER_WRITE, OWNER_READ, GROUP_READ, и WORLD_READ, если не задан аргумент PERMISSIONS.

Форма PROGRAMS идентична форме FILES за исключением того, что права по умолчанию для устанавливаемого файла также включают OWNER_EXECUTE, GROUP_EXECUTE, и WORLD_EXECUTE. Эта форма предназначена для установки программ, которые не являются целями, например, скриптов оболочки. Используйте форму TARGETS для установки целей, построенных внутри проекта.

Список files... , переданный в FILES или PROGRAMS, может использовать «генераторные выражения» с синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений. Однако, если какой-либо элемент начинается с генераторного выражения, он должен быть результатом полного пути.

Должен быть указан либо TYPE, либо DESTINATION, но не оба. Аргумент TYPE задаёт общий тип файла устанавливаемых файлов. Место назначения будет установлено автоматически, взяв соответствующую переменную из GNUInstallDirs, или используя встроенное значение по умолчанию, если эта переменная не определена. См. таблицу ниже для поддерживаемых типов файлов и соответствующих переменных и встроенных значений по умолчанию. Проекты могут указать аргумент DESTINATION вместо типа файла, если они хотят явно определить место назначения установки.

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

Проекты, которые хотят следовать общепринятой практике установки заголовков в подкаталог проекта, должны указать место назначения, а не полагаться на вышеперечисленные значения. Использование наборов файлов для заголовков вместо 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) для доступных выражений.

Установка каталогов

Примечание

Для установки поддерева каталога заголовков рассмотрите использование наборов файлов, определенных с помощью target_sources(FILE_SET). Наборы файлов не только сохраняют структуру каталогов, но также связывают заголовки с целевым объектом и устанавливают их как часть целевого объекта.

install(DIRECTORY dirs...
        TYPE <type> | DESTINATION <dir>
        [FILE_PERMISSIONS permissions...]
        [DIRECTORY_PERMISSIONS permissions...]
        [USE_SOURCE_PERMISSIONS] [OPTIONAL] [MESSAGE_NEVER]
        [CONFIGURATIONS [Debug|Release|...]]
        [COMPONENT <component>] [EXCLUDE_FROM_ALL]
        [FILES_MATCHING]
        [[PATTERN <pattern> | REGEX <regex>]
         [EXCLUDE] [PERMISSIONS permissions...]] [...])

Формат 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 или с использованием встроенного значения по умолчанию, если эта переменная не определена. См. таблицу ниже для поддерживаемых типов файлов и соответствующих переменных и встроенных значений по умолчанию. Проекты могут указать аргумент DESTINATION вместо типа файла, если они хотят явно определить место назначения установки.

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

Обратите внимание, что некоторые встроенные значения по умолчанию типов используют каталог DATAROOT в качестве префикса. Префикс DATAROOT вычисляется аналогично типам, используя переменную CMAKE_INSTALL_DATAROOTDIR и встроенное значение по умолчанию share. Вы не можете использовать DATAROOT в качестве параметра TYPE; используйте DATA вместо этого.

Для соответствия политик расположения файлов системы дистрибуции, если проекты должны указать DESTINATION, рекомендуется использовать путь, начинающийся с соответствующей переменной GNUInstallDirs. Это позволяет администраторам пакетов контролировать место назначения установки, устанавливая соответствующие переменные кэша.

Новое в версии 3.4: Место назначения установки, указанное в качестве аргумента DESTINATION может использовать "генераторные выражения" с синтаксисом $<...>. Обратитесь к руководству cmake-generator-expressions(7) для доступных выражений.

Новое в версии 3.5: Список dirs..., переданный DIRECTORY может также использовать "генераторные выражения".

Логика пользовательской установки

install([[SCRIPT <file>] [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> DESTINATION <dir>
        [NAMESPACE <namespace>] [FILE <name>.cmake]
        [PERMISSIONS permissions...]
        [CONFIGURATIONS [Debug|Release|...]
        [CXX_MODULES_DIRECTORY <directory>]
        [EXPORT_LINK_INTERFACE_LIBRARIES]
        [COMPONENT <component>]
        [EXCLUDE_FROM_ALL])
install(EXPORT_ANDROID_MK <export-name> DESTINATION <dir> [...])

Форма EXPORT генерирует и устанавливает файл CMake, содержащий код для импорта целей из дерева установки в другой проект. Цели установки связаны с экспортом <export-name> с помощью параметра EXPORT подписи install(TARGETS), описанной выше. Параметр NAMESPACE добавит префикс <namespace> к именам целей при их записи в файл импорта. По умолчанию сгенерированный файл будет называться <export-name>.cmake, но параметр FILE может быть использован для указания другого имени. Значение, заданное параметру FILE должно быть именем файла с расширением .cmake. Если задан параметр CONFIGURATIONS, файл будет установлен только при установке одной из указанных конфигураций. Кроме того, сгенерированный файл импорта будет ссылаться только на соответствующие конфигурации целей. Ключевое слово 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

Примечание

Экспериментальная функция. Включается с помощью CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API

Укажите подкаталог для хранения информации о модулях C++ для целей в наборе экспорта. Эта директория будет заполнена файлами, которые добавляют необходимую информацию о свойствах целей в соответствующие цели. Обратите внимание, что без этой информации ни один из модулей C++, которые являются частью целей в наборе экспорта, не будет поддерживать импорт в целевых проектах.

Форма EXPORT полезна для помощи внешним проектам использовать цели, построенные и установленные текущим проектом. Например, код

install(TARGETS myexe EXPORT myproj DESTINATION bin)
install(EXPORT myproj NAMESPACE mp_ DESTINATION lib/myproj)
install(EXPORT_ANDROID_MK myproj DESTINATION share/ndk-modules)

установит исполняемый файл myexe в <prefix>/bin и код для его импорта в файл <prefix>/lib/myproj/myproj.cmake и <prefix>/share/ndk-modules/Android.mk. Внешний проект может загрузить этот файл с помощью команды include и сослаться на исполняемый файл myexe из дерева установки с использованием имени импортированной цели mp_myexe, как если бы цель была построена в собственном дереве.

Примечание

Эта команда заменяет команду install_targets() и свойства целей PRE_INSTALL_SCRIPT и POST_INSTALL_SCRIPT. Она также заменяет формы FILES команд install_files() и install_programs(). Порядок обработки этих правил установки относительно правил, сгенерированных командами install_targets(), install_files() и install_programs() не определён.

Установка зависимостей выполнения

Новое в версии 3.21.

install(RUNTIME_DEPENDENCY_SET <set-name>
        [[LIBRARY|RUNTIME|FRAMEWORK]
         [DESTINATION <dir>]
         [PERMISSIONS permissions...]
         [CONFIGURATIONS [Debug|Release|...]]
         [COMPONENT <component>]
         [NAMELINK_COMPONENT <component>]
         [OPTIONAL] [EXCLUDE_FROM_ALL]
        ] [...]
        [PRE_INCLUDE_REGEXES regexes...]
        [PRE_EXCLUDE_REGEXES regexes...]
        [POST_INCLUDE_REGEXES regexes...]
        [POST_EXCLUDE_REGEXES regexes...]
        [POST_INCLUDE_FILES files...]
        [POST_EXCLUDE_FILES files...]
        [DIRECTORIES directories...]
        )

Устанавливает набор зависимостей выполнения, созданный ранее одной или несколькими командами install(TARGETS) или install(IMPORTED_RUNTIME_ARTIFACTS). Зависимости целей, входящих в набор зависимостей выполнения, устанавливаются в местоназначение RUNTIME и компонент на платформах DLL, и в местоназначение LIBRARY и компонент на платформах, не являющихся DLL. Фреймворки macOS устанавливаются в местоназначение FRAMEWORK и компонент.

Сгенерированный скрипт установки вызывает 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 <directories>
  • PRE_INCLUDE_REGEXES <regexes>
  • PRE_EXCLUDE_REGEXES <regexes>
  • POST_INCLUDE_REGEXES <regexes>
  • POST_EXCLUDE_REGEXES <regexes>
  • POST_INCLUDE_FILES <files>
  • POST_EXCLUDE_FILES <files>

Сгенерированный сценарий установки

Примечание

Использование этой функции не рекомендуется. Пожалуйста, рассмотрите использование команды 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–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.25/command/install.html

Spec-Zone.ru

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