有人可以向我解释构建系统中 $(DESTDIR)
变量的用途吗?
我的意思是我知道它为当前安装的包指向一个临时目录,但我无法想象它的实际用途是什么。
澄清一下,我知道什么是 --prefix
选项,例如,如果我们将构建系统指向 ./configure --prefix="/usr"
所有包的文件都属于/usr
,比如/usr/lib
、/usr/share
等等,但是在Makefiles中我已经还看到了以下结构:
$(DESTDIR)/$(prefix)
这样做的目的是什么?简而言之,DESTDIR
和 prefix
之间有区别吗?什么时候应该使用它们?
最佳答案
是的,有一个非常重要的区别......在某些环境中。
前缀旨在成为在一切完成后将安装(或看起来要安装)包的位置。例如,如果包中的任何地方都有硬编码路径,它们将基于前缀路径(当然,出于多种原因,我们都希望包避免硬编码路径)。
DESTDIR 允许人们将内容实际安装到实际前缀以外的地方:DESTDIR 被添加到所有前缀值之前,以便安装位置具有与最终位置完全相同的目录结构/布局,但根目录不是 /
。
出于各种原因,这可能很有用。一个例子是类似 GNU stow 的设施这允许同时安装多个实例并且易于控制。其他示例是使用 RPM 或 DEB 创建包文件:安装包后,您希望它在根目录下解压,但为了创建包,您需要将它安装在其他位置。
其他人出于他们自己的原因使用它:基本上这一切都归结为 DESTDIR 用于为安装创建一个“暂存区”,而不是实际安装到最终位置。
等等
关于makefile - DESTDIR 与构建系统中的前缀选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50603956/