我在makefile和使用多个文件的项目中都是新手。我现在正在做的工作有一个main.c和两个用户库。这是makefile:
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中调试这个项目(使用multiple-windows变量)但是当我运行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
我该怎么办?
答案 0 :(得分:3)
之所以发生是因为
-g
标志的对象/可执行文件-g
标志 在makefile中添加选项不会自动触发重新编译。由于您有clean
目标,只需执行
make clean
make
并使用-g
选项重建对象:现在可以使用符号生成可执行文件。快乐的调试。
除此之外:不要将头文件传递给gcc
命令。它们非常有用,因此make
知道依赖关系(在上面的行中),但在从.c
文件构建对象时则不知道。这样做会产生无用的.o
文件。