2016-07-07 46 views
0

當你做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的東西嗎?

+1

簡短的回答是,'MAKEFILE_LIST'包含make解析makefile文件的空格分隔列表,按照make解析它們的順序。所以任何導致make解析makefile的能力都會修改這個列表。這包括'MAKEFILES'變量,命令行中提供給'-f'選項的名稱,提供給'MAKEFLAGS'或'GNUMAKEFLAGS'變量中出現的任何'-f'選項的名稱,以及任何'include '指令。這就是我能想到的一切。 – MadScientist

+0

從'make'的輸出中@MadScientist是否可以推斷是否使用'MAKEFILES ='傳遞了任何makefile?這就是我真正需要的。 – Adrian

+0

你的意思是,從'make -p'的輸出?爲什麼不檢查打印出來的'MAKEFILES'變量的內容? – MadScientist

回答

0

尋找在--print-data-base輸出-*-command-variables-*-,如果它存在,並設置了var MAKEFILES - 爲make all MAKEFILES=thing.mk - 那麼你知道,無論它被設置爲將出現在每一個MAKEFILE_LIST第一即實際生成文件的名稱之前。

當你與

MAKEFILE_LIST := thing.mk Makefile cfg.mk 

交叉引用你會知道,目前生成文件的名稱是Makefile,一切之後出現的makefile文件閱讀,因爲他們是在頂部include d。