CMAKE_INSTALL_MODE

在 3.22 版本加入.

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

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

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

使用场景

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

  • 节省存储空间,因为不必在磁盘上复制文件。

  • 在安装目标位置可以看到对符号链接源的更改,而无需重新运行安装步骤。

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

允许值

CMAKE_INSTALL_MODE 允许使用以下值:

COPY,为空或未设置

在目标位置复制文件。这是默认行为。

ABS_SYMLINK

在目标位置创建指向源文件的*绝对*符号链接。如果无法创建链接,则会因错误而停止。

ABS_SYMLINK_OR_COPY

类似于 ABS_SYMLINK 但如果无法创建符号链接,则退回到静默复制。

REL_SYMLINK

在目标位置创建指向源文件的 relative 符号链接。如果无法创建链接,则会因错误而停止。

REL_SYMLINK_OR_COPY

类似于 REL_SYMLINK 但如果无法创建符号链接,则退回到静默复制。

符号链接

如果引用的文件不能使用相对路径表示,则尝试通过 REL_SYMLINK 并回退到 ABS_SYMLINK。如果无法创建链接,则会因错误而停止。

SYMLINK_OR_COPY

类似于 SYMLINK 但如果无法创建符号链接,则退回到静默复制。

备注

符号链接由参考文件路径而不是它自己的内容组成,因此有两种方式来表达关系,通过*相对*或*绝对*路径。

何时设置环境变量

要使环境变量生效,必须在正确的构建阶段设置它。

  • 如果项目直接调用 file(INSTALL) ,则必须在配置阶段设置环境变量。

  • 为了适用于 install(),必须在安装期间设置环境变量。如果使用``install`` 或``package`` 构建目标,这可能是在构建期间,或者在从命令行调用安装或运行时与构建分开:manual:cpack <cpack(1)> .

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

鉴于上述情况,建议在所有阶段(配置、构建和安装)一致地设置环境变量。

注意事项

请谨慎使用此环境变量。以下强调了一些需要考虑的要点:

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

  • 符号链接并非在所有平台上都可用。

  • 此环境变量与 ExternalProject 的安装步骤交互的方式更为复杂。有关详细信息,请参阅该模块的文档。

  • 符号链接以持久的方式将目标与源联系起来。写入两者中的任何一个都会影响两个文件系统对象。这与正常安装行为形成对比,正常安装行为仅复制执行安装时的文件,安装源和目标之间没有持久关系。

  • 不支持将 CMAKE_INSTALL_MODEIOS_INSTALL_COMBINED 结合使用。

  • 将 CMAKE_INSTALL_MODE 从上一次运行时的状态更改为可能会导致意外结果。从非符号链接模式移动到符号链接模式将丢弃目标位置的所有先前文件,但反之则不然。一旦目标处存在符号链接,即使切换到非符号链接模式,符号链接也会继续存在于目标处,不会被实际文件替换。