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

标签 makefile build configure build-system build-settings

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

澄清一下,我知道什么是 --prefix 选项,例如,如果我们将构建系统指向 ./configure --prefix="/usr"所有包的文件都属于/usr,比如/usr/lib/usr/share等等,但是在Makefiles中我已经还看到了以下结构:

$(DESTDIR)/$(prefix)

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

最佳答案

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

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

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

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

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

等等

关于makefile - DESTDIR 与构建系统中的前缀选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50603956/

相关文章:

c++ - CLI 构建的嵌入式 C++ 的 Visual Studio 自定义构建定义

makefile - Makefile 应该在 'make clean' 上删除自己吗?

shell - 如何将 shell 变量传递给 autogen.sh 脚本

eclipse - 强制 Eclipse CDT makefile 在编译前清理文件

c - 在 Debian 上不用 IDE 编程 STM32F4x

android - 在 Linux 机器上使用 Ant FAILED 为 Android 构建失败,但在 Mac 机器上成功

c - 如何将 ws2_32.lib 与 autotools 链接

c++ - 在 Qt 中调整 ./configure 步骤

linux - 可执行文件不是用 Qt 制作的

c - Makefile 编译多个文件