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–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.24/envvar/CMAKE_INSTALL_MODE.html