GNU make - 如何从--print-data-base输出确定makefile的名称+路径

时间:2016-07-07 21:33:50

标签: makefile gnu-make

执行make all --print-data-base时,在执行完给定的makefile后会得到这种输出:

...
# default
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
# default
OUTPUT_OPTION = -o $@
# 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将生成文件传递给make all --print-data-base MAKEFILES=MyMake.mk,则第一个条目将为MyMake.mk

因此,规则似乎是:查看变量-*-command-variables-*-并确定是否已传入makefile。如果是,则从变量MAKEFILE_LIST中折扣并从剩余的第一个字符串中删除entries是makefile的名称。

问题

是否还有其他“陷阱”会在真正的makefile前面的var MAKEFILE_LIST中插入一些内容?

1 个答案:

答案 0 :(得分:0)

-*-command-variables-*-输出中查找--print-data-base,如果它存在并设置var MAKEFILES - 就像在make all MAKEFILES=thing.mk中那样 - 那么你知道无论它设置的是什么首先出现在每个MAKEFILE_LIST中,即在实际makefile的名称之前。

交叉引用时
MAKEFILE_LIST :=  thing.mk Makefile cfg.mk 

你会知道当前makefile的名称是Makefile,之后出现的所有内容都是makefile,因为它们位于顶部include d。