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 可能会导致意外的结果。从非符号链接模式移动到符号链接模式将丢弃目标位置的任何先前文件,但反之则不然。一旦符号链接存在于目标位置,即使您切换到非符号链接模式,符号链接将继续存在于目标位置,并且不会被实际文件替换。