2013-02-25 42 views
0

我以前使用gdb,但从来没有使用makefile,只能以非常简单的方式进行配置。 g ++ -g -o file.cpp等我已经试过了,我无法识别调试对象。我想调试我所有的可执行文件编译。为gdb配置我的生成文件

我正在运行g ++和Ubuntu。

compile: scanner.o parser.o listing.o locals.o globals.o 
    g++ -o compile scanner.o parser.o listing.o locals.o globals.o 

scanner.o: scanner.c locals.h globals.h listing.h tokens.h 
    g++ -c scanner.c 

scanner.c: scanner.l 
    flex scanner.l 
    mv lex.yy.c scanner.c 

parser.o: parser.c listing.h locals.h globals.h 
    g++ -c parser.c 

parser.c tokens.h: parser.y 
    bison -d -v parser.y 
    mv parser.tab.c parser.c 
    mv parser.tab.h tokens.h 

listing.o: listing.cc 
    g++ -c listing.cc 

locals.o: locals.cc 
    g++ -c locals.cc 

globals.o: globals.cc 
    g++ -c globals.cc 

回答

3

请勿覆盖默认规则。根据需要分配CC和CFLAGS。换句话说,你的Makefile应该是(在全部):

CC=g++ # Not best practice. See comments below 
CFLAGS=-g 
compile: scanner.o parser.o listing.o locals.o globals.o 
    $(CC) $(CFLAGS) -o [email protected] $^ 

scanner.o: scanner.c locals.h globals.h listing.h tokens.h 
parser.o: parser.c listing.h locals.h globals.h 

scanner.c: scanner.l 
    flex scanner.l 
    mv lex.yy.c scanner.c 

parser.c tokens.h: parser.y 
    bison -d -v parser.y 
    mv parser.tab.c parser.c 
    mv parser.tab.h tokens.h 

顺便说一句,你真的应该使用CXX来指定C++编译器和命名您的源代码文件正确。 (C使用* .c,C++使用* .cxx)由于您使用的是非标准名称,因此您需要通过使用CC的C++编译器来愚弄make,这不是最好的做法。

+0

运行它究竟如何你有它,使编译,GDB编译给我一个没有调试符号找到消息。我认为这应该表明有人不使用-g标志? – 2013-02-26 14:12:59

+0

糟糕。编译规则中有一个明显的缺失。编辑。 (虽然这可能不会解决问题......必须给予更多考虑。) – 2013-02-26 14:14:29

+0

你做了一个make clean并重建目标文件吗?观察make的输出并查看'-g'标志是否在命令行中。 – 2013-02-26 14:16:01