使用“make”构建 c++ 程序时忽略 -g 选项
Posted
技术标签:
【中文标题】使用“make”构建 c++ 程序时忽略 -g 选项【英文标题】:-g option ignored when building c++ programs with "make" 【发布时间】:2013-04-12 16:57:52 【问题描述】:不幸的是,我不记得第一次发生这种情况是什么时候,但最近我在运行“make”构建程序时发现了一个奇怪的错误。
我有以下makefile:
SOURCE = Foo.cpp \
Foobar.cpp
OBJECTS = $(SOURCE:.cpp=.o)
LIBS = -lX11 -lGL -lGLU
program: $(OBJECTS)
g++ $(OBJECTS) $(LIBS) -o platform
.o: .cpp
g++ -g -c $@
令人讨厌的是,当我运行 make 时,我得到:
$ make
g++ -c -o Foo.o Foo.cpp
g++ -c -o Foobar.o Foobar.cpp
g++ Foo.o Foobar.o -lX11 -lGL -lGLU -o program
“-g”选项被忽略。有谁知道为什么会这样?有趣的是,我尝试在终端中手动输入命令:
$ g++ -g -c Foo.cpp
$ g++ -g -c Foobar.cpp
$ make
g++ Foo.o Foobar.o -lX11 -lGL -lGLU -o program
它按预期工作,我可以正确使用 gdb 之类的程序,所以这似乎不是 C++/gcc 问题,我对 makefile 的经验并不丰富,但我没有阅读过任何示例或教程似乎对消失的选项有任何问题,而且似乎没有任何关于它的帖子。难道我只是做了一些愚蠢的事情而没有意识到吗?
【问题讨论】:
它可能使用了内置的编译规则而不是你的(虽然我不能立即明白为什么)。尝试设置CPPFLAGS=-g
或CFLAGS
如果您没有注意到(而且您似乎没有注意到),-g
不会被忽略。 规则是。您是否还没有看到规则正文中没有-o
,但您的输出中有?正在使用默认规则。
错误:.o: .cpp
。更好:%.o: %.cpp
。这是一个很好的makefile tutorial
由于内置规则正确地完成了它的工作,我倾向于说只是按照 Rup 的建议去修改 CPPFLAGS 和 CFLAGS,它们被拾取内置规则。
【参考方案1】:
构建目标文件的规则错误,缺少%
:
%.o: %.cpp
g++ -g -c $<
【讨论】:
我认为$@
应该是$<
...?
不幸的是,这也不起作用。我逐字复制了你的建议并得到了这个:'g++ -g -c Main.o g++: error: Main.o: No such file or directory g++: fatal error: no input files'
谢谢约阿希姆!问题是 $
以上是关于使用“make”构建 c++ 程序时忽略 -g 选项的主要内容,如果未能解决你的问题,请参考以下文章
有啥好的 C++ 项目构建工具可以替代 make 吗? [关闭]