make 文件试图找出 postgresql 源代码 DESTDIR 的意思

make 文件试图找出 postgresql 源代码 DESTDIR 的意思

追加并用空格分隔
https://superuser.com/questions/360178/what-does-make-install-do
尝试理解以下 make 命令。

installincludes:
    $(INSTALL) -d '$(DESTDIR)$(includedir_server)/'
    $(INSTALL_DATA) $(addprefix $(srcdir)/, $(RELATIVE_INCLUDES)) '$(DESTDIR)$(includedir_server)/'

rg 是 rigrep 正则表达式命令,类似于 grep。
为了理解这一点,我首先从 开始includedir_server

 pg_config | rg server

返回

INCLUDEDIR-SERVER = /usr/include/postgresql/15/server

在文件夹/src(postgresql源代码)中执行

cat Makefile.global.in | rg --line-number 'includedir_server'

返回

170:includedir_server = $(pkgincludedir)/server
248:override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)

现在明白了,$(INSTALL) -d '$(DESTDIR)$(includedir_server)/'我觉得以下逻辑是正确的。

$(includedir_server)  ==  $(pkgincludedir)/server  == /usr/include/postgresql/15/server

但如果上述逻辑为真,那么 $(includedir_server) 已经是完整路径了。那么什么是$(DESTDIR)?这部分还有 $(INSTALL) -d什么作用?

答案1

DESTDIR适合当您想要安装到真实目标路径以外的某个位置时使用,例如,如果您正在准备软件包或从外部安装到 chroot 中。您不会发现它在构建中定义,而是在必要时在外部指定(请参阅交叉编译:在构建(非目标)系统上运行“make install”)。

$(INSTALL) -d创建作为参数给出的目录。

相关内容