有人可以解释一下构建系统中$(DESTDIR)
变量的用途吗? 我的意思是我知道它指向当前安装的软件包的临时目录,但我无法想象它的实际用途是什么。
澄清一下,好吧,我知道--prefix
选项是什么,例如,如果我们像./configure --prefix="/usr"
这样的 buldsystem 指向所有包的文件都将属于/usr
,例如/usr/lib
、/usr/share
等,但在 Makefiles 中我还看到了以下结构:
$(DESTDIR)/$(prefix)
这又有什么用呢?简而言之,DESTDIR
和prefix
之间有区别吗,什么时候应该同时使用两者?
是的,有一个非常重要的区别...在某些环境中。
前缀旨在是完成所有操作后将安装(或似乎已安装(包的位置。 例如,如果包中任何位置都有硬编码路径,它们将基于前缀路径(当然,我们都希望包避免硬编码路径,原因有很多(。
DESTDIR 允许人们实际将内容安装在实际前缀以外的其他位置:DESTDIR 附加到所有前缀值的前面,以便安装位置具有与最终位置完全相同的目录结构/布局,但植根于/
以外的其他位置。
出于各种原因,这可能很有用。 一个例子是像GNU stow这样的设施,它允许同时安装多个实例并易于控制。 其他示例是使用 RPM 或 DEB 创建软件包文件:安装软件包后,您希望在 root 端解压缩它,但为了创建软件包,您需要将其安装在其他位置。
其他人出于自己的原因使用它:基本上这一切都归结为 DESTDIR 用于为安装创建一个"暂存区域",而无需实际安装到最终位置。
等。