将 gdb 与 make 一起使用

Dam*_*n H 1 c gdb makefile

我想在我的应用程序中使用 gdb 来调试所有库。我用它make来编译应用程序,如果我尝试使用 gdb,它会显示no debugging symbols found.

如何修改我的 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
Run Code Online (Sandbox Code Playgroud)

Eri*_*ist 5

您所问问题的答案是在编译目标文件时添加“-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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

clean:
    @- $(RM) $(PROGRAM)
    @- $(RM) $(OBJS)
Run Code Online (Sandbox Code Playgroud)

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

  • Makefile 需要在目标之前添加制表符。删除 `$(PROGRAM):` 下行前面的 4 个空格,替换为制表符。对“clean:”下的两行执行相同的操作。我不知道如何在答案中添加选项卡,编辑框不允许我这样做。 (2认同)