在MakeFile中使用调试器

时间:2015-11-28 01:45:29

标签: c debugging makefile

我编写了一个完整的程序及其makefile,唯一的麻烦就是我必须知道如何实现调试器。我一直在网上看类似的问题,但无济于事。

这是我的makefile:

#  the variable CC is the compiler to use.
CC=gcc 
#  the variable CFLAGS is compiler options.
CFLAGS=-c -Wall 

assign4: main1.o ObjectManager.o
    $(CC) main1.o ObjectManager.o -o assign4

main1.o: main1.c ObjectManager.h
    $(CC) $(CFLAGS) main1.c

ObjectManager.o: ObjectManager.c ObjectManager.h
    $(CC) $(CFLAGS) ObjectManager.c

clean:
    rm -rf *o assign4

我试图调整CFLAGS:到-g Wall,但它只是说:

  

架构x86_64的未定义符号:     “_main”,引自:        主要可执行文件的隐式输入/启动   ld:找不到架构x86_64的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)   make:*** [ObjectManager.o]错误1

有任何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:2)

看看这条规则:

ObjectManager.o: ...
    $(CC) $(CFLAGS) ObjectManager.c

如果CFLAGS-c -Wall,则-c表示gcc将编译源文件,但不会尝试链接它。 这正是用于生成目标文件而非可执行文件的目的。这样做的一个结果是源dile(ObjectManager.c)不需要包含main函数 - 编译器信任您在链接时提供一个。

但如果CFLAGS-g -Wall,则-g 暗示-c。因此,gcc将尝试创建可执行文件,并在main不存在时中止。

解决方案:

CFLAGS := -Wall -g # the -g can be added with a conditional if you like

ObjectManager.o: ...
    $(CC) $(CFLAGS) -c ObjectManager.c