使用“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=-gCFLAGS 如果您没有注意到(而且您似乎没有注意到),-g 不会被忽略。 规则是。您是否还没有看到规则正文中没有-o,但您的输出中有?正在使用默认规则。 错误:.o: .cpp。更好:%.o: %.cpp。这是一个很好的makefile tutorial 由于内置规则正确地完成了它的工作,我倾向于说只是按照 Rup 的建议去修改 CPPFLAGS 和 CFLAGS,它们拾取内置规则。 【参考方案1】:

构建目标文件的规则错误,缺少%

%.o: %.cpp
    g++ -g -c $<

【讨论】:

我认为$@ 应该是$&lt;...? 不幸的是,这也不起作用。我逐字复制了你的建议并得到了这个:'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 吗? [关闭]

make构建工具

为 c++ 构建 nana 时出现“make”错误

构建Android时会忽略make -j(jobs)选项(默认为所有核心)

从命令行构建多个 CDT C++ 项目

从本地 C++ 程序构建 conda 包