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

时间:2018-05-30 11:50:52

标签: makefile build configure build-system build-settings

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

为了澄清,我知道--prefix选项是什么,例如,如果我们指定像./configure --prefix="/usr"这样的buldsystem,那么所有包的文件都属于/usr,例如{ {1}},/usr/lib等等,但在Makefile中,我也看到了以下结构:

/usr/share

那是什么目的?简而言之,$(DESTDIR)/$(prefix) DESTDIR之间是否存在差异,何时应该同时使用?

1 个答案:

答案 0 :(得分:1)

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

在完成所有操作后,前缀应该是安装包的位置(或显示)。例如,如果包中有硬编码路径,那么它们将基于前缀路径(当然,我们都希望包避免硬编码路径,原因很多)。

DESTDIR允许人们实际安装除实际前缀之外的其他内容:DESTDIR被添加到所有前缀值之前,以便安装位置与最终位置具有完全相同的目录结构/布局,但是根除{除{之外的某处{1}}。

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

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