执行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
中插入一些内容?
答案 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。