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(),必须在安装时设置环境变量。这可能是在使用install或package构建目标进行构建时,或者在从命令行调用安装或运行cpack时独立于构建。当使用
ExternalProject时,可能需要在构建阶段设置,因为外部项目的配置、构建和安装步骤将在主项目的构建阶段执行。
鉴于以上情况,建议在所有阶段(配置、构建和安装)一致地设置环境变量。
注意事项¶
请谨慎使用此环境变量。以下是需要考虑的一些要点:
CMAKE_INSTALL_MODE只影响文件,不影响目录。符号链接并非在所有平台上都可用。
此环境变量与
ExternalProject的安装步骤的交互更为复杂。有关详细信息,请参阅该模块的文档。符号链接以持久的方式将目标与源关联起来。对其中任何一个的写入都会影响两个文件系统对象。这与正常的安装行为不同,后者仅复制安装时encement的文件,而源和目标之间没有持久的关系。
不支持将
CMAKE_INSTALL_MODE与IOS_INSTALL_COMBINED结合使用。更改
CMAKE_INSTALL_MODE的值,使其与之前运行时的值不同,可能会导致意外结果。从非符号链接模式移动到符号链接模式将丢弃目标处的任何先前文件,但反之则不然。一旦目标处存在符号链接,即使切换到非符号链接模式,该符号链接仍将保留在目标处,并且不会被实际文件替换。