【发布时间】:2009-08-21 23:51:04
【问题描述】:
我正在从其他人那里读取 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 $@ $^ $(LDFLAGS)
Makefile.depend: *.h *.cc Makefile
$(CC) -M *.cc > Makefile.depend
clean:
\rm -f test *.o Makefile.depend
-include Makefile.depend
这是我的问题:
虽然没有明确说明,但在编译期间是否在此 Makefile 中未显示隐式规则使用的 $(CXXFLAGS) 以生成目标文件?
我也想知道为什么$(CXXFLAGS)会出现在联动阶段?我认为它仅适用于编译阶段?我可以从“$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)”中删除 $(CXXFLAGS) 吗?如果我错了,这是否意味着 g++ 也会生成调试信息并在链接时进行优化?
为什么将 -ggdb3 -O3 一起用于非调试目的?它的目的是什么?如果只是考虑提高速度,那么使用-O3不是更好吗?
出于调试目的,一起使用 -ggdb3 -fno-omit-frame-pointer 会比单独使用 -ggdb3 做得更好吗?我试图通过阅读 gcc 文档来理解 -fno-omit-frame-pointer 的目的,但仍然感到困惑。
我可以将“-include Makefile.depend”移动到“$(CC) -M *.cc > Makefile.depend”下方和“clean”上方吗?它在 Makefile 中的位置重要吗?
【问题讨论】:
标签: debugging optimization makefile linker compilation