2011-03-22 62 views
2

我有這個使用Makefile編譯的C++項目,有時候(我的猜測)有一些缺失包含,我得到一個神祕的「錯誤2」消息,並停止make過程。
我懷疑失蹤包括,因爲這是它包含一個不存在的頭文件時發生的第三次。Make/gcc神祕錯誤2:如何獲得更多信息?

它看起來像這樣:

---- Build tmp/foo.o ---- 
---- Build tmp/bar.o ---- 
---- Build tmp/toto.o ---- 
---- Build tmp/tata.o ---- 
make: *** [build_Project] Error 2 

這是推動我堅果,因爲即使是使用詳細的命令(其中每個G ++調用時顯示),我什麼都看不到。
我希望這傢伙嘔吐一些錯誤的消息,如「找不到標題X」或「未定義的參考Y」,但沒有什麼。

我的gcc編譯選項是-O0 -Wall -Werror -Wno-write-strings -fno-rtti -fno-exceptions,如果有幫助。

啊,而且我們使用包括依賴的Makefile中招:

ifneq ($(strip $(DEPENDS)),) 
ifneq ($(MAKECMDGOALS),clean) 
-include $(DEPENDS) 
endif 
endif 

(見herehere獲取更多信息)

雖然這是記載的東西,我懷疑我的問題有事情做與這種依賴包容。

如果你已經無意中發現了這個問題,隨時對此置評...

在此先感謝。

編輯: 好,後一點的播放,在-include $(DEPENDS)前抑制-給了我一些更多的信息(生成文件站上缺少包括文件)。

make[1]: *** No rule to make target « foo.h », necessary for « tmp/bar.d ». Stop. 

現在的缺點是,當我啓動make的第一次,我得到應包含每個依賴文件missing bar.d file消息(這就是爲什麼我們在第一時間把-)。 任何解決方案?

+1

我認爲我們需要看到更多的makefile例如你如何調用gcc-並且我傾向於顯示命令編譯出於這種原因 – Mark 2011-03-22 11:01:42

+1

如果你設置了一個變量,一些makefile會關掉花哨的輸出。例如'automake',如果你運行'make V = 1',還會嘗試'make VERBOSE = 1',或者檢查'Makefile'以獲得更好的想法。 – 2011-03-22 11:57:37

回答

2

好吧,我的編輯解決了這個問題:在include之前放置一個破折號-隱藏來自依賴生成的錯誤消息。

以後注意:不要試圖智勝Make。

1

這是一個定製的Makefile,可能通過類似CMake的一些工具,躲在類似這樣的編譯器輸出:

gcc -o a.out a.c 2>&1 > /dev/null 

如果你不知道發生了什麼這聽起來像一個好主意,重溫完全構建系統,嘗試重新開始。

+0

不,我確實寫了makefile,但可能傳遞了一些棘手的副作用。編譯行不包含這樣的'2>&1>/dev/null',所以不能這樣。 – Gui13 2011-03-22 12:50:43