2017-12-08 21 views
4

私はメイクファイルと複数のファイルを使用するプロジェクトの両方で初心者です。私が今作業しているのは、main.cと2つのユーザライブラリです。ここでは、メイクファイルです:私は(複数のウィンドウの変数を使用)のEmacsでこのプロジェクトをデバッグできるようにしたいと思いメイクファイルでプロジェクトをデバッグする方法

CC = gcc 
OBJECTS = main.o path.o util.o 

9_1 : $(OBJECTS) 
    $(CC) -g $(OBJECTS) -o 9_1 

main.o : main.c path.h util.h 
    $(CC) -g -c main.c path.h util.h 
path.o : path.c path.h util.h 
    $(CC) -g -c path.c path.h util.h 
util.o : util.c util.h 
    $(CC) -g -c util.c util.h 

.PHONY : clean 
clean : 
    rm $(OBJECTS) 

しかし私はgdb -i=mi 9_1(デフォルトのオプション)を実行し、メインにブレークポイントを追加しようとします。それは私に許されない。具体的にはb main.c:25を実行して取得します。

No symbol table is loaded. Use the "file" command. 
Breakpoint 1 (main.c:25) pending 

どうすればよいですか?

すでに -gフラグ
  • せずに、オブジェクト/実行ファイルを構築し

    • あなたはその後

    メイクファイル内のオプションを追加するにはない-gフラグを追加しましたので、それが起こった

  • +3

    あなたのプロジェクトをきれいにしましたか?なぜなら、-gオプションが追加されてコンパイル後にmakeが再構築されないからです。 –

    +5

    btw '$(CC)-g -c main.c path.h util.h' =>' $(CC)-g -c main.c'ヘッダファイルをコンパイルしません... –

    +0

    何ですか私のプロジェクトをきれいにすることを意味する? – Nepec

    答えて

    3

    再コンパイルを自動的に開始します。あなたがclean目標を持っているので、ちょうど

    make clean 
    make 
    

    を行うと、オブジェクトは-gオプションで再構築されています。実行可能ファイルは、今の記号を用いて製造されます。ハッピーデバッグ。

    脇に:gccコマンドにヘッダーファイルを渡しません。便利なのでmakeは(上記の行の)依存関係を知っていますが、.cファイルからオブジェクトをビルドするときは分かりません。そうすると無用のファイル.oが作成されます。

    関連する問題