2010-07-14 38 views
3

讓我用這個評論來說吧,我對Makefiles或make瞭解甚少。調試Makefile

有一個非常大的項目,每晚自動生成。它以Debug和Release兩種模式構建,調試用於Valgrind等實用程序提供代碼分析。不知何故,某些構建的庫在make過程中會丟失調試標誌,這使得某些分析輸出無益。我負責發現錯誤,我需要一些關於如何查找/修復問題的建議。

在此先感謝

+0

你能發佈代碼嗎?或者至少行〜1到25?標誌/選項通常設置在開始處。 – 2010-07-14 23:11:11

+0

有> 100個Makefiles,由頂層Makefile(內容非常少)以及相互之間產生。我無法完整地發佈其中的任何一個(封閉源代碼),如果我知道要發佈哪個部分有幫助,我可能已經得到了答案。 – user108088 2010-07-14 23:18:56

回答

4

鑑於稀疏的信息,我可以根據我在Makefile中使用方面已經看到了大項目屈指可數只繪製一個非常普遍的策略。

如果您還不知道標誌的起源位置,請搜索Makefiles進行查找。

喜歡的東西:

find . -name Makefile -exec grep -nH -- -g {} \; 

(調整-name模式,如果你的項目使用包含的Makefile像foo.mk或bar.mak或東西,調整「-g」如果你的調試標誌的東西其他)。

您可能會發現它分配給像CFLAGS這樣的變量。查看分配此變量的位置,它可能是有條件地設置的(例如ifeq($(RELEASE),1))。

現在看一下庫中沒有得到這些標誌的Makefile。找到編譯命令所在的位置。它使用正確的變量嗎?這些Makefiles是否覆蓋變量?

將構建的輸出捕獲到文件並搜索可能沒有設置調試標誌的任何其他位置也可能會有幫助。

5

本身也支持調試標誌-d;取決於你的Makefile如何互相調用,可能會傳遞它(如果不是,你可以用腳本重寫它們);那麼如果你將結果輸出提供給一個文件,你可以開始尋找線索。

+1

根據我的經驗,'make -d'太吵了,沒用。 – bstpierre 2010-07-15 16:55:07

+0

我假設你會使用grep或類似來增加信號/噪音。 – reinierpost 2010-07-15 22:50:08