我已经将我的项目转换为使用cmake。在开发过程中,我希望能够以非常规方式安装产品,但(特别是)让安装的数据文件成为指向源代码树的符号链接。该项目是SWI-Prolog,它提供了直接导航和编辑源文件的功能。如果我使用它来扩展和修复系统库,但是我正在编辑安装的 * 副本 *,然后我需要在提交之前复制回源文件。我知道我可以覆盖cmake中的函数,但在本例中,我们处理的是生成的cmake代码。
cmake
kh212irz1#
尝试将环境变量CMAKE_INSTALL_MODE设置为REL_SYMLINK。例如:
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
/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_OR_COPY
类似于REL_SYMLINK,但如果无法创建符号链接,则回退到静默复制。
SYMLINK
如果引用的文件不能使用相对路径表示,则尝试通过REL_SYMLINK,然后回退到ABS_SYMLINK。如果无法创建链接,则停止并返回错误。
SYMLINK_OR_COPY
类似于SYMLINK,但如果无法创建符号链接,则回退到静默复制。
1条答案
按热度按时间kh212irz1#
尝试将环境变量
CMAKE_INSTALL_MODE
设置为REL_SYMLINK
。例如:
然后正常运行cmake构建过程:
这将在
/path/to/root
中安装指向build目录和source目录中的文件的相对符号链接。基本上除了符号链接之外,其他都是正常安装的。例如: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
,但如果无法创建符号链接,则回退到静默复制。