我是 makefile 和使用多个文件的项目的新手。我现在正在做的事情有一个 main.c 和两个用户库。这是生成文件:
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)
我希望能够在 Emacs 中调试这个项目(使用多窗口变量)但是当我运行 gdb -i=mi 9_1
时(默认选项)并尝试在 main.c 中添加断点它不允许我这样做。具体来说:我运行 b main.c:25
我得到了
No symbol table is loaded. Use the "file" command.
Breakpoint 1 (main.c:25) pending
我该怎么办?
最佳答案
它的发生是因为
- 您已经在不使用
-g
标志的情况下构建了您的对象/可执行文件 - 您添加了
-g
标志之后
在 makefile 中添加选项不会自动触发重新编译。既然你有一个 clean
目标,那就去做吧
make clean
make
并且使用 -g
选项重建对象:现在使用符号生成可执行文件。调试愉快。
另外:不要将头文件传递给 gcc
命令。它们很有用,因此 make
知道依赖关系(在上面的行中),但在从 .c
文件构建对象时却不知道。这样做会创建无用的 .o
文件。
关于c - 如何使用 makefile 调试项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47714033/