2014-02-14 45 views
0

这是我的Make文件。我有main.c,我在其中调用一个名为SLCreate的函数来创建排序的链表。我包括排序,list.h在我的main.c,但它仍然无法正常工作Makefile并发症错误。未定义的参考C编程

COMPILER = gcc 
CCFLAGS = -ansi -pedantic -Wall -std=c99 -lm 

all: main 

debug: 
make DEBUG=TRUE 


main: sorted-list.o main.o 
$(COMPILER) $(CCFLAGS) -o main main.o 
main.o: main.c sorted-list.h 
$(COMPILER) $(CCFLAGS) -c main.c 
sorted-list: sorted-list.o 
$(COMPILER) $(CCFLAGS) -o sorted-list sorted-list.o 
sorted-list.o: sorted-list.c sorted-list.h 
$(COMPILER) $(CCFLAGS) -c sorted-list.c 


ifeq ($(DEBUG), TRUE) 
CCFLAGS += -g 
endif 

clean: 
rm -f main 
rm -f *.o 
rm -f sorted-list 
rm -f *.o 

的错误:

/main.c:38:未定义的引用`SLCreate”

+2

你'主'目标取决于'sorted-list.o',但它在编译器命令中缺少该目标。 – Dmitri

+1

在'sorted-list'中有'main(...)'函数吗? – Beta

回答

0

“未定义的引用”几乎总是意味着你没有链接需要的对象。你main规则应该是这样的:

main: sorted-list.o main.o 
    $(COMPILER) $(CCFLAGS) -o main sorted-list.o main.o 

或者更简洁,这一点:

main: sorted-list.o main.o 
    $(COMPILER) $(CCFLAGS) -o [email protected] $^ 
+0

感谢您的帮助!只是为了我的理解,你能告诉我什么 这个“o $ @ $ ^”是什么意思? – user3100209

+0

@ user3100209:它们是[自动变量](http://www.gnu.org/software/make/manual/make.html#Automatic-Variables); '$ @'展开为目标名称,'$ ^'展开为先决条件列表。 – Beta

0

您需要添加sorted-list.o到您的编译器命令行您main目标:

main: sorted-list.o main.o 
    $(COMPILER) $(CCFLAGS) -o main main.o sorted-list.o