私はHilton LipschitzのblogからMakefileを作成し、デバッグ情報を生成するために少し変更しました。主要部品が記載されています:Makefile(-c -g)でコンパイル/リンクプロセスを分離してgcc/clangにデバッグ情報を生成するには?
CC := clang -arch x86_64
CFLAGS := -c -O0
$(TARGET): $(OBJECTS)
@echo " Linking $(TARGET)"; $(CC) $^ -o $(TARGET) $(LIB)
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@mkdir -p $(BUILDLIST)
@echo "Compiling $<..."; $(CC) $(CFLAGS) $(INC) -o [email protected] $<
debug: CFLAGS += -g
debug: $(TARGET)
今make
これらのコマンドを実行します(パスは...
で要約されている):I
clang -arch x86_64 -c -O0 -g -I... -o build/program.o src/program.c
clang -arch x86_64 build/program.o -o bin/program -L...
は問題がある:これらのコマンドを実行します
clang -arch x86_64 -c -O0 -I... -o build/program.o src/program.c
clang -arch x86_64 build/program.o -o bin/program -L...
make debug
ながらmake
またはmake debug
を実行すると、program.dSYM
サブフォルダは0で作成されません。フォルダー。代わりに、私は-c
引数なしでコンパイルする場合:
clang -arch x86_64 -g -O0 -I... -L... -o bin/program.o src/program.c
両方の実行可能ファイルと.dSYM
はbin
フォルダに作成されます。
- コンパイルとリンク処理を分離する際に、このMakefileにデバッグ情報生成機能を追加するにはどうすればよいですか?
- ステップ(デバッグ情報のコンパイル/リンク)はどのように生成されますか?
UPDATE:私はGitHubのrepoを作成し、それに関連したMakefileとソースをアップロードしました。問題を再現するには、ターミナルで以下のコマンドを実行してください:
git clone https://github.com/hamid914/gdb-lldb-test.git
cd gdb-lldb-test
make debug
最後の行を、make debug
は、これらのコマンドを実行します。
clang -arch x86_64 -c -O0 -std=c11 -g -I include -I include/libs -I /usr/local/include -o build/program.o src/program.c
clang -arch x86_64 build/program.o -o bin/program -L /usr/local/lib -lm -g
そしてbin
フォルダの内容は次のとおりです。
$ ls bin
program
私が-c
引数なしでclang
を実行すると、
clang -arch x86_64 -O0 -std=c11 -g -I include -I include/libs -I /usr/local/include -L /usr/local/lib -lm -o bin/program src/program.c
内容は次のとおりです。
$ ls bin
program program.dSYM
リンカーに '-g'フラグを付けても.dSYMファイルは生成されません。コンパイラとリンカの両方に '-g'を追加しようとしましたが、結果は同じです。 –
@HamidRohani自己完結型の例を質問に追加してください。うまく動作します。 – user657267