我想在我的应用程序中使用 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/