0

我以前使用过 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
4

1 回答 1

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

于 2013-02-25T20:09:20.700 回答