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 に答える