2013-02-25 3 views
0

이전에 gdb를 사용했지만 메이크 파일을 사용하지 않고 아주 간단한 방법으로 구성했습니다. g ++ -g -o file.cpp 등 모든 것을 시도해 보았고 디버깅 객체를 인식 할 수 없습니다. 내 모든 실행 가능한 컴파일을 디버그하고 싶다.gdb 용 메이크 파일 구성

저는 g ++ 및 우분투를 실행하고 있습니다.

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를 지정하십시오. 즉, 사용자의 메이크가 (전체적으로)해야한다 : AS를

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 

를 제외하고, 당신은 정말 C++ 컴파일러를 지정하고 소스 코드를 적절하게 파일 이름을 CXX를 사용해야합니다. (C++의 경우 * .c, C++의 경우 * .cxx 사용) 비표준 이름을 사용하고 있으므로 CC를위한 C++ 컴파일러를 사용하여 바보짓을해야합니다. 이는 실제로 모범 사례가 아닙니다.

+0

정확히 어떻게 실행했는지 컴파일하고, gdb 컴파일은 디버깅 심볼을 찾지 못했습니다. 나는 이것이 -g 플래그를 사용하지 않는 누군가를 가리 키기로되어 있다고 생각했다. –

+0

나는 컴파일을위한 규칙에서 눈부신 누락을 가지고있다. 편집 됨. (아마도이 ​​문제를 해결할 수는 없지만 ... 더 많은 고려해야합니다.) –

+0

정리를하고 오브젝트 파일을 다시 작성 했습니까? make의 결과를보고'-g' 플래그가 명령 행에 있는지 확인하십시오. –