c - 将 gdb 与 make 结合使用

标签 c makefile gdb

我想在我的应用程序中使用 gdb 来调试所有库。我使用 make 来编译应用程序,如果我尝试 gdb,它会说没有找到调试符号

如何修改我的 makefile 以使用 -g 标志?

hospital: hospital.o config.o utils.o message.o semaphore.o sharedmem.o logger.o
    gcc -o hospital hospital.o config.o utils.o message.o semaphore.o sharedmem.o logger.o
hospital.o: hospital.c
    gcc -c hospital.c
sharedmem.o: sharedmem.c sharedmem.h
    gcc -c sharedmem.c
message.o: message.c message.h
    gcc -c message.c
semaphore.o: semaphore.c semaphore.h
    gcc -c semaphore.c
config.o: config.c config.h
    gcc -c config.c
logger.o: logger.c logger.h
    gcc -c logger.c
utils.o: utils.c utils.h
    gcc -c utils.c
clean:
    rm -f *.o

最佳答案

您所问问题的答案是在编译目标文件时添加“-g”开关,即

hospital: hospital.o config.o utils.o message.o semaphore.o sharedmem.o     logger.o
    gcc -o hospital hospital.o config.o utils.o message.o semaphore.o     sharedmem.o logger.o
hospital.o: hospital.c
    gcc -g -c hospital.c
sharedmem.o: sharedmem.c sharedmem.h
    gcc -g -c sharedmem.c
message.o: message.c message.h
    gcc -g -c message.c
semaphore.o: semaphore.c semaphore.h
    gcc -g -c semaphore.c
config.o: config.c config.h
    gcc -g -c config.c
logger.o: logger.c logger.h
    gcc -g -c logger.c
utils.o: utils.c utils.h
    gcc -g -c utils.c
clean:
    rm -f *.o

但是,像这样的 Makefile 确实很难维护。 Make 可以为你做很多这样的事情,查看 this example这应该很适合您的项目。只需将“-g”添加到 CFLAGS 变量即可。

即使是更小的东西,像这样,也会做你想做的事:

PROGRAM := hostpital
SRCS := $(wildcard *.c)
OBJS := ${SRCS:.c=.o}
CFLAGS=-g

$(PROGRAM): $(OBJS)
    $(CC) $(OBJS) -o $(PROGRAM)

clean:
    @- $(RM) $(PROGRAM)
    @- $(RM) $(OBJS)

注意: Makefile 在操作之前需要制表符。用制表符替换前导空格。

关于c - 将 gdb 与 make 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34514138/

相关文章:

c++ - gdb python编程: how to write code that will set breakpoints to every method of a C++ class?

gdb - 在 GDB 中 break *main VS break main()

c - 如何使用 write() 以十六进制形式写入指针地址的标准输出

c - 按位比较和将 C 转换为 Delphi

windows - dmake 中的 shell 命令添加 '/S'

c++ - 用于#include 和其他文件的不同路径

c - Malloc 在递归函数中崩溃

c++ - 通过删除点链接和重复的斜线规范化 Unix 文件路径

linux - 如何查看Makefile中包含的文件? (Linux)

GDB自杀(突然杀死调试进程)