Make

製作文件試圖找出postgresql原始碼DESTDIR的意思

  • July 14, 2022

用空格進行附加和分隔

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什麼作用?

DESTDIR適用於當您想要安裝在真實目標路徑之外的某個位置時使用,例如,如果您正在準備一個包,或者如果您正在從外部安裝到 chroot 中。您不會在建構中找到它,它是在必要時在外部指定的(請參閱交叉編譯:在建構(非目標)系統上執行make install)。

$(INSTALL) -d創建作為參數給出的目錄。

引用自:https://unix.stackexchange.com/questions/709826