DESTDIR 与构建系统中的前缀选项?

DESTDIR vs prefix options in a build system?

有人可以向我解释 $(DESTDIR) 变量在构建系统中的用途吗? 我的意思是我知道它指向当前安装包的临时目录,但我无法想象它的实际用途。

澄清一下,好吧,我知道 --prefix 选项是什么,例如,如果我们将 buldsystem 指向 ./configure --prefix="/usr",所有包的文件都将属于 /usr,例如 [=15] =]、/usr/share 等等,但在 Makefiles 中我还看到了以下结构:

$(DESTDIR)/$(prefix)

这样做的目的是什么?简而言之,DESTDIRprefix 之间有区别吗?什么时候应该同时使用?

是的,有一个非常重要的区别...在某些环境中。

前缀旨在成为安装包的位置(或 appear 待安装)在一切完成后。例如,如果包中的任何地方都有硬编码路径,它们将基于前缀路径(当然,出于多种原因,我们都希望包避免硬编码路径)。

DESTDIR 允许人们将内容实际安装到实际前缀以外的地方:DESTDIR 被添加到所有前缀值之前,以便安装位置具有与最终位置完全相同的目录 structure/layout,但根目录/.

以外的地方

出于各种原因,这可能很有用。一个例子是像 GNU stow 这样的工具,它允许同时安装多个实例并且易于控制。其他示例是使用 RPM 或 DEB 创建包文件:安装包后,您希望将其解压缩到根目录,但为了创建包,您需要将其安装在其他位置。

其他人出于他们自己的原因使用它:基本上这一切都归结为 DESTDIR 用于为安装创建 "staging area",而不是实际安装到最终位置。

等等