CMAKE_INSTALL_MODE

从 3.22 版本开始添加。

这是一个 CMake 环境变量。它的初始值取自调用进程环境。

CMAKE_INSTALL_MODE 环境变量允许用户在 file(INSTALL)install() 的备用模式中操作 CMake。

安装的默认行为是从源目录将源文件复制到目标目录。但此环境变量允许用户覆盖该行为,使 CMake 创建符号链接。

使用场景

安装符号链接而非复制文件可以通过以下方式提供帮助

  • 节省存储空间,因为文件无需在磁盘上重复。

  • 不会重新运行安装步骤,在安装目的地也可以看到符号链接的源的更改内容。

  • 通过安装目的地的链接进行编辑会修改链接源。当处理 CMake 项目层次结构时,这可能很有用,即使用 ExternalProject 和一致的源导航和重构在所有项目中都是需要的。

允许的值

以下值为 CMAKE_INSTALL_MODE 允许使用

COPY,空值或未设置

复制文件到其目的地。这是默认行为。

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(),环境变量必须在安装期间设置。这可以是在使用 installpackage 构建目标构建期间,也可以在调用安装或从命令行运行 cpack 时与构建分离。

  • 当使用 ExternalProject 时,在构建阶段可能需要,因为外部项目的配置、构建和安装步骤在主项目的构建阶段执行。

根据以上内容,建议在所有阶段(配置、构建和安装)中一致地设置环境变量。

警告

谨慎使用此环境变量。以下重点介绍一些需要考虑的要件:

  • CMAKE_INSTALL_MODE 仅影响文件,不影响目录。

  • 并非所有平台都支持符号链接。

  • 此环境变量与外部项目的安装步骤交互的方式 ExternalProject 更加复杂。如需了解详情,请参阅该模块的文档。

  • 符号链接以持久方式将目的地绑定到源。写入任一位置都将影响两个文件系统对象。这与仅在执行安装时复制文件且安装的源目的地之间没有持久关系的普通安装方式相反。

  • 不能将 CMAKE_INSTALL_MODEIOS_INSTALL_COMBINED 结合使用。

  • CMAKE_INSTALL_MODE 从前一次运行中的内容进行更改可能导致意外结果。从非符号链接模式切换到符号链接模式将舍弃目的地处的任何以前文件,但反之则不成立。一旦符号链接存在于目标位置,即使切换到非符号链接模式,符号链接仍将继续存在于目标位置且不会替换为实际文件。