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

5 makefile build configure build-system build-settings

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

为了澄清,我知道什么--prefix是选项,例如,如果我们指向 buldsystem like ./configure --prefix="/usr"all the package's files will own 、/usrlike等等,但在 Makefiles 中我还看到了以下结构:/usr/lib/usr/share

$(DESTDIR)/$(prefix)
Run Code Online (Sandbox Code Playgroud)

这样做的目的是什么?简而言之,两者的使用和使用时间DESTDIR有区别吗?prefix

Mad*_*ist 5

是的,在某些环境中,存在非常重要的差异。

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

DESTDIR 允许人们实际将内容安装在实际前缀之外的其他位置:DESTDIR 被添加到所有前缀值之前,以便安装位置与最终位置具有完全相同的目录结构/布局,但植根于/.

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

其他人使用它有自己的原因:基本上这一切都归结为 DESTDIR 用于为安装创建“暂存区域”,而不是实际安装到最终位置。

ETC。

  • 我是否正确理解,“$(DESTDIR)”实际上允许您选择安装的 __ROOT__,而不是实际的“/”,而“--prefix”只是根据使用“$(”选择的 rootdir 来放置包的所有结构目标目录)`? (3认同)
  • 是的,这就是意图。 (2认同)