gpt4 book ai didi

macos - 如何在 Makefile (-c -g) 中使用分离的编译/链接过程在 gcc/clang 中生成调试信息?

转载 作者:行者123 更新时间:2023-12-05 08:09:14 27 4
gpt4 key购买 nike

我从 Hilton Lipschitz 的 blog 制作了一个 Makefile , 并对其进行少量更改以生成调试信息。主要部件如下:

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 $@ $<

debug: CFLAGS += -g
debug: $(TARGET)

现在make运行这些命令(路径总结为 ... ):

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运行这些命令:

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...

问题是当我执行 make 时或 make debug , 没有 program.dSYM子文件夹将在 bin 中创建文件夹。相反,当我在没有 -c 的情况下编译时参数:

clang -arch x86_64 -g -O0 -I... -L... -o bin/program.o src/program.c

可执行文件和.dSYM创建于 bin文件夹。

  1. 如何在编译和链接过程分离的情况下为这个 Makefile 添加调试信息生成功能?
  2. 在哪个步骤(编译/链接)中产生调试信息?

更新:我创建了一个 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

如果我运行 clang没有-c参数:

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

bin 的内容文件夹是:

$ ls bin
program program.dSYM

最佳答案

您还需要将 -g 添加到链接器配方中以生成 .dSYM 文件,标准方法是添加

debug: LDFLAGS += -g

但是您所遵循的示例无缘无故地定义了自己的变量,但看起来 LIB 应该可以工作。

关于macos - 如何在 Makefile (-c -g) 中使用分离的编译/链接过程在 gcc/clang 中生成调试信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40010510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com