我正在閱讀其他人的Makefile,如下所示。是優化和生成編譯或鏈接的調試信息部分
LDFLAGS=-lm -ljpeg -lpng
ifeq ($(DEBUG),yes)
OPTIMIZE_FLAG = -ggdb3 -DDEBUG -fno-omit-frame-pointer
else
OPTIMIZE_FLAG = -ggdb3 -O3
endif
CXXFLAGS = -Wall $(OPTIMIZE_FLAG)
all: test
test: test.o source1.o source2.o
$(CXX) $(CXXFLAGS) -o [email protected] $^ $(LDFLAGS)
Makefile.depend: *.h *.cc Makefile
$(CC) -M *.cc > Makefile.depend
clean:
\rm -f test *.o Makefile.depend
-include Makefile.depend
這裏是我的問題:
- 雖然沒有明確,使用$(CXXFLAGS)編譯過程中在這個Makefile中未示出的隱含規則生成對象文件
?
我也想知道爲什麼$(CXXFLAGS)出現在聯動階段?我認爲這只是編輯階段?我可以從「$(CXX)$(CXXFLAGS)-o $ @ $^$(LDFLAGS)」中刪除$(CXXFLAGS)嗎?如果我錯了,是否意味着g ++也會生成調試信息並在鏈接上進行優化?
爲什麼要將-ggdb3 -O3一起用於非調試目的?它的目的是什麼?如果僅僅考慮提高速度,那麼是不是隻使用-O3更好?
出於調試目的,如何一起使用-ggdb3 -fno-omit-frame-pointer將比單獨使用-ggdb3更好?我試圖通過閱讀gcc文件來理解-fno-omit-frame-pointer的目的,但仍然感到困惑。
我可以在「$(CC)-M * .cc> Makefile.depend」和「clean」之上移動「-include Makefile.depend」嗎?它在Makefile中的位置是否重要?
謝謝! 您的意思是說它是「-ggdb3 -O3」,用於在優化的代碼上運行調試器? 對於非調試目的,「-ggdb3 -DDEBUG -fno-omit-frame-pointer」不涉及優化,那麼爲什麼「-fno-omit-frame-pointer實際上減少了優化」,如果沒有優化代碼? – Tim 2009-08-22 01:15:58
我無法確定。不能保證這個makefile是完全一致的。也許這組標誌是從另一個變化中剩下的,或者寫這個標誌的人沒有完全理解它們的含義。 – 2009-08-22 20:18:08