2014-02-14 47 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