我之前使用过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
答案 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,这实际上并不是最佳实践。