當你做make all --print-data-base
,你會得到這樣的輸出後,在給定的makefile完成正在執行確定名稱+從--print-資料庫生成文件的路徑:GNU讓 - 如何輸出
...
# default
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
# default
OUTPUT_OPTION = -o [email protected]
# environment
QT_INSTALL_PLUGINS = C:/Users/mureadr/Desktop/A/HMI_FORGF/qt5binaries/plugins
# default
COMPILE.cpp = $(COMPILE.cc)
# environment
PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
# makefile (from 'Makefile', line 1)
MAKEFILE_LIST := C:/Users/mureadr/Desktop/A/ImpTarget.mk Makefile
# environment
TMP = C:/Temp
...
當前目錄簡直等於CURDIR
- 未顯示 - 但makefile的名稱並不那麼簡單。
看着6.14 Other Special Variables: MAKEFILE_LIST,看起來答案是:看看MAKEFILE_LIST
的第一項,這就是makefile的名字。但是,如果您通過make all --print-data-base MAKEFILES=MyMake.mk
傳遞一個生成文件到make
,那麼第一個條目將是MyMake.mk
。
因此,該規則似乎是:查看變量-*-command-variables-*-
並確定是否已傳入makefile。如果是,請將其從變量MAKEFILE_LIST
中折減,其餘條目中的第一個字符串是生成文件的名稱。
問題
是否還有其他的「陷阱」,將在真實的makefile的前面插入VAR MAKEFILE_LIST
的東西嗎?
簡短的回答是,'MAKEFILE_LIST'包含make解析makefile文件的空格分隔列表,按照make解析它們的順序。所以任何導致make解析makefile的能力都會修改這個列表。這包括'MAKEFILES'變量,命令行中提供給'-f'選項的名稱,提供給'MAKEFLAGS'或'GNUMAKEFLAGS'變量中出現的任何'-f'選項的名稱,以及任何'include '指令。這就是我能想到的一切。 – MadScientist
從'make'的輸出中@MadScientist是否可以推斷是否使用'MAKEFILES ='傳遞了任何makefile?這就是我真正需要的。 – Adrian
你的意思是,從'make -p'的輸出?爲什麼不檢查打印出來的'MAKEFILES'變量的內容? – MadScientist