为gdb配置我的makefile

时间:2013-02-25 20:01:44

标签: makefile gdb g++

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

我正在运行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

1 个答案:

答案 0 :(得分: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 $@  $^

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)由于您使用的是非标准名称,因此需要使用C ++编译器来制作CC,这实际上并不是最佳实践。