2013-02-25 54 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