
我繼承了一個混亂的 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
,它會在分派規則之前轉儲所包含檔案的清單。