2011-09-14 51 views
1

我需要一些幫助來調試Makefile系統。我有一個相當大的Makefile依賴樹,實際上是Android源碼的makefile系統。針對未構建的目標調試Makefile

在某些時候,因爲缺少文件的生成失敗:

/bin/bash: out/host/linux-x86/bin/mkfs.ubifs: No such file or directory 

文件mkfs.ubifs應該在化妝過程中要「構建」,而事實上它的工作原理,如果我做的:

make out/host/linux-x86/bin/mkfs.ubifs 

mkfs.ubifs構建,並且一切正常,直到我再次清理所有內容並從頭開始構建。

這表明對我來說,某處存在缺失的依賴關係。所以我的問題是,我怎麼去調試呢?我如何發現確切的哪個目標缺少依賴關係?我可以提供哪些選項,這將爲我提供關於錯誤位置的線索?

任何其他建議也將不勝感激。謝謝。 :)

更新

使用make -d提供了相當大量的輸出。 究竟我確定從哪個目標(源文件和行)和錯誤發生?

回答

4

問題解決。這似乎make -p是調試這個問題的最有效的方法:

-p, --print-data-base 
    Print the data base (rules and variable values) that results from 
    reading the makefiles; then execute as usual or as otherwise spec- 
    ified. This also prints the version information given by the -v 
    switch (see below). To print the data base without trying to 
    remake any files, use make -p -f/dev/null. 

從這個輸出是比較容易確定哪些目標是失敗,什麼依賴性,即應包括在內。

+0

啊,在查看手冊以查明哪些選項可用的罕見場合之一,比請他人爲您做這件事更有幫助...... – eriktous

+0

他他,你是對的。在提出這個問題之前,我可能已經看過了。 –

1

目標的先決條件與其命令之間存在差異,即未爲目標指定依賴關係。我不認爲你可以使用make來調試,因爲make不能告訴你缺少依賴。

但是,您可以嘗試使用-d開關調用make。這將告訴你,當它遇到缺少的文件時,它嘗試構建哪個目標。下一步將是在makefile中找到該目標的規則並添加缺失的依賴項。

相關問題