下一节:,上一节:,上一级:Makefile 约定   [目录][索引]


7.2.4 DESTDIR:支持分阶段安装

DESTDIR 是一个变量,它被添加到每个安装目标文件的前面,像这样:

$(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
$(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a

DESTDIR 变量由用户在 make 命令行上指定,它是一个绝对文件名。例如:

make DESTDIR=/tmp/stage install

DESTDIR 应该只在 install*uninstall* 目标中支持,因为只有在这些目标中它才有用。

如果您的安装步骤通常会安装 /usr/local/bin/foo/usr/local/lib/libfoo.a,那么像上面例子中那样调用的安装将会改为安装 /tmp/stage/usr/local/bin/foo/tmp/stage/usr/local/lib/libfoo.a

以这种方式将变量 DESTDIR 添加到每个目标的前面可以实现分阶段安装,其中已安装的文件不会直接放置到它们期望的位置,而是复制到临时位置 (DESTDIR)。但是,已安装的文件会保持它们的相对目录结构,并且任何嵌入的文件名都不会被修改。

您不应该在您的 Makefile 中设置 DESTDIR 的值;这样,文件默认会被安装到它们期望的位置。此外,指定 DESTDIR 不应该以任何方式改变软件的运行,因此它的值不应该包含在任何文件内容中。

DESTDIR 支持通常用于软件包创建。它也对那些想要了解给定软件包将安装到何处的用户有帮助,并允许那些通常没有权限安装到受保护区域的用户在获得这些权限之前构建和安装。最后,它可以与 stow 等工具一起使用,在这些工具中,代码安装在一个地方,但通过符号链接或特殊的挂载操作使其看起来安装在其他地方。因此,我们强烈建议 GNU 软件包支持 DESTDIR,尽管这不是绝对的要求。


下一节:,上一节:,上一级:Makefile 约定   [目录][索引]