我继承了一个混乱的 makefile 网络,它本身是从另一个项目继承的,到处都包含 makefile。我试图做一个简单的改变,而不破坏整个事情(虽然这很诱人,但我现在没有时间)。
有什么办法可以从 gmake 中得到完整的 makefile,IE,所有包含的文件都已包含在内?我知道如何转储数据库,但这与加载的所有无关垃圾一样难以遵循。
答案1
翻拍有一些非常有趣的调试输出。
答案2
您正在寻找的内容相当于cc -E
for make
。我不知道有这样的等价物。使用外部工具在许多情况下会有所帮助,但并非所有情况下,由于二次扩张。
但也许这可能会让你更近一步。在初始 Makefile 的末尾,添加以下规则:
.PHONY: printMakefiles
printMakefiles:
echo $(MAKEFILE_LIST)
您现在可以通过运行来找出包含哪些 Makefiles
make printMakefiles
请注意,这不是 100% 可靠,因为可能存在条件包含。
答案3
不确定这是否递归地起作用,但是像这样的东西呢:
strace -e trace=open make | grep -i makefile
答案4
Makefile
编辑您正在调用的main 。在末尾添加此行(或至少include
在文件中出现的最后一行之后):
$(info MAKEFILE_LIST == $(MAKEFILE_LIST))
现在,当您运行make
该文件时Makefile
,它会在分派规则之前转储所包含文件的列表。