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