CMAKE_INSTALL_MODE
Новое в версии 3.22.
Это переменная окружения CMake Переменная среды. Её начальное значение берётся из переменной окружения вызывающего процесса.
Переменная окружения CMAKE_INSTALL_MODE позволяет пользователям использовать CMake в альтернативном режиме file(INSTALL) и install().
По умолчанию при установке происходит копирование исходного файла из каталога исходников в каталог назначения. Данная переменная позволяет пользователю переопределить это поведение, заставив CMake создавать символические ссылки вместо копирования.
Сценарии использования
Использование символических ссылок вместо копирования файлов может помочь следующим образом:
- Экономия дискового пространства, так как файлы не нужно дублировать.
- Изменения исходного файла, на который указывает символическая ссылка, видны в каталоге назначения без необходимости повторного запуска этапа установки.
- Редактирование через ссылку в каталоге назначения изменяет исходный файл ссылки. Это может быть полезно при работе с иерархией проекта CMake, например, с использованием
ExternalProject, и желательно сохранение согласованности навигации по исходникам и рефакторинга между проектами.
Допустимые значения
Для CMAKE_INSTALL_MODE разрешены следующие значения:
-
COPY, empty or unset -
Дублировать файл в каталоге назначения. Это поведение по умолчанию.
-
ABS_SYMLINK -
Создать абсолютную символическую ссылку на исходный файл в каталоге назначения. Прерваться с ошибкой, если ссылку создать невозможно.
-
ABS_SYMLINK_OR_COPY -
Как
ABS_SYMLINK, но перейти к молчаливому копированию, если символическую ссылку создать нельзя. -
REL_SYMLINK -
Создать относительную символическую ссылку на исходный файл в каталоге назначения. Прерваться с ошибкой, если ссылку создать невозможно.
-
REL_SYMLINK_OR_COPY -
Как
REL_SYMLINK, но перейти к молчаливому копированию, если символическую ссылку создать нельзя. -
SYMLINK -
Попробовать так, как если бы через
REL_SYMLINK, и перейти кABS_SYMLINK, если со ссылкой на файл нельзя выразить относительный путь. Прерваться с ошибкой, если ссылку создать невозможно. -
SYMLINK_OR_COPY -
Как
SYMLINK, но перейти к молчаливому копированию, если символическую ссылку создать нельзя.
Примечание
Символическая ссылка состоит из пути к файлу-ссылке, а не из его содержимого, поэтому есть два способа выразить эту связь: относительный или абсолютный путь.
Когда устанавливать переменную окружения
Для того чтобы переменная окружения вступила в силу, её необходимо установить в правильной фазе сборки.
- Если проект вызывает
file(INSTALL)напрямую, переменную окружения нужно установить во время фазы конфигурации. - Чтобы применить её к
install(), переменную окружения нужно установить во время установки. Это может быть во время сборки, если используются цели сборкиinstallилиpackage, или отдельно от сборки, при вызове инструмента установки или выполненияcpackиз командной строки. - При использовании
ExternalProject, это может потребоваться во время фазы сборки, так как собственные этапы конфигурации, сборки и установки внешнего проекта будут выполняться во время фазы сборки основного проекта.
Учитывая вышесказанное, рекомендуется устанавливать переменную окружения последовательно на всех этапах (конфигурация, сборка и установка).
Ограничения
Используйте эту переменную окружения с осторожностью. Ниже перечислены некоторые моменты, которые следует учитывать:
-
CMAKE_INSTALL_MODEвлияет только на файлы, а не на каталоги. - Символические ссылки недоступны на всех платформах.
- Способ взаимодействия этой переменной окружения с этапом установки
ExternalProjectболее сложен. Более подробную информацию см. в документации данного модуля. - Символическая ссылка связывает каталог назначения с каталогом источника постоянным образом. Запись в любой из двух объектов влияет на оба объекта файловой системы. Это в отличие от обычного поведения установки, которая копирует файлы, как они были на момент выполнения установки, без какой-либо долговременной связи между исходным и целевым каталогами установки.
- Сочетание
CMAKE_INSTALL_MODEсIOS_INSTALL_COMBINEDне поддерживается. - Изменение
CMAKE_INSTALL_MODEот предыдущей версии может привести к непредсказуемым результатам. Переход от режима без создания символических ссылок к режиму создания символических ссылок приведет к удалению любого предыдущего файла в каталоге назначения, но обратное неверно. После создания символической ссылки в каталоге назначения, даже если вы переключитесь на режим без создания символических ссылок, символическая ссылка останется в каталоге назначения и не будет заменена фактическим файлом.
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/envvar/CMAKE_INSTALL_MODE.html