使用CMAKE符号链接安装文件

jaql4c8m  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(146)

我已经将我的项目转换为使用cmake。在开发过程中,我希望能够以非常规方式安装产品,但(特别是)让安装的数据文件成为指向源代码树的符号链接。
该项目是SWI-Prolog,它提供了直接导航和编辑源文件的功能。如果我使用它来扩展和修复系统库,但是我正在编辑安装的 * 副本 *,然后我需要在提交之前复制回源文件。
我知道我可以覆盖cmake中的函数,但在本例中,我们处理的是生成的cmake代码。

kh212irz

kh212irz1#

尝试将环境变量CMAKE_INSTALL_MODE设置为REL_SYMLINK
例如:

export CMAKE_INSTALL_MODE=REL_SYMLINK

然后正常运行cmake构建过程:

cd _build
cmake -DFOO=bar ..
make install DESTDIR=/path/to/root

这将在/path/to/root中安装指向build目录和source目录中的文件的相对符号链接。基本上除了符号链接之外,其他都是正常安装的。例如:

/path/to/root/usr/include/mylib/mylib.h -> ../../../../src/mylib/mylib.h
/path/to/root/usr/lib64/mylib.so.0.10.0 -> ../../../_build/target/mylib.so.0.10.0

Cmake接受几个不同的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,但如果无法创建符号链接,则回退到静默复制。

相关问题