如何使用makefile调试项目

时间:2017-12-08 12:02:51

标签: c debugging makefile emacs gdb

我在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

我该怎么办?

1 个答案:

答案 0 :(得分:3)

之所以发生是因为

  • 您已经构建了没有-g标志的对象/可执行文件
  • 您之后添加了-g标志

在makefile中添加选项不会自动触发重新编译。由于您有clean目标,只需执行

make clean
make

并使用-g选项重建对象:现在可以使用符号生成可执行文件。快乐的调试。

除此之外:不要将头文件传递给gcc命令。它们非常有用,因此make知道依赖关系(在上面的行中),但在从.c文件构建对象时则不知道。这样做会产生无用的.o文件。