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
更加复杂。如需了解详情,请参阅该模块的文档。符号链接以持久方式将目的地绑定到源。写入任一位置都将影响两个文件系统对象。这与仅在执行安装时复制文件且安装的源目的地之间没有持久关系的普通安装方式相反。
不能将
CMAKE_INSTALL_MODE
与IOS_INSTALL_COMBINED
结合使用。将
CMAKE_INSTALL_MODE
从前一次运行中的内容进行更改可能导致意外结果。从非符号链接模式切换到符号链接模式将舍弃目的地处的任何以前文件,但反之则不成立。一旦符号链接存在于目标位置,即使切换到非符号链接模式,符号链接仍将继续存在于目标位置且不会替换为实际文件。