Spec-Zone.ru › CMake 3.21

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).

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

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

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

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]
         [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 для получения подробностей.

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

Для обычных исполняемых файлов, статических библиотек и динамических библиотек аргумент DESTINATION не требуется. Для этих типов целей, когда DESTINATION опущено, по умолчанию используется назначение из соответствующей переменной из GNUInstallDirs, или устанавливается по умолчанию, если эта переменная не определена. То же самое относится к общедоступным и приватным заголовкам, связанным с установленным целевым объектом через свойства цели PUBLIC_HEADER и PRIVATE_HEADER. Назначение всегда должно быть указано для модульных библиотек, пакетов Apple и фреймворков. Назначение может быть опущено для интерфейсных и объектных библиотек, но они обрабатываются по-другому (см. обсуждение этой темы в конце этого раздела).

В следующей таблице показаны типы целевых объектов с их соответствующими переменными и встроенными значениями по умолчанию, которые применяются, когда не указан путь назначения:

Тип целевого объекта

Переменная 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

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

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

INCLUDES DESTINATION

Этот параметр задает список каталогов, которые будут добавлены к свойству целевого объекта INTERFACE_INCLUDE_DIRECTORIES целевого объекта <targets> при экспорте командой 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).

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

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

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. Это позволяет администраторам пакетов контролировать место назначения установки, устанавливая соответствующие переменные кэша. Следующий пример показывает, как следовать этому совету при установке заголовков в подкаталог проекта:

include(GNUInstallDirs)
install(FILES mylib.h
        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/myproj
)

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

Новое в версии 3.20: Переименование при установке, заданное как аргумент RENAME, может использовать "генераторские выражения" с синтаксисом $<...>. См. руководство cmake-generator-expressions(7) для доступных выражений.

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

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 include/myproj
        FILES_MATCHING PATTERN "*.h")

извлечёт и установит заголовочные файлы из дерева исходных кодов.

Некоторые опции могут следовать за выражением 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|...]]
        [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, включая транзитивные зависимости, флаги включения и определения, необходимые для использования библиотек.

Форма 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>

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

Примечание

Использование этой функции не рекомендуется. Пожалуйста, рассмотрите использование аргумента --install команды cmake(1) вместо этого.

Команда 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–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.21/command/install.html

Spec-Zone.ru

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