2013-12-20 24 views
0

當我運行下面的代碼,它給我的錯誤信息是:問題王氏使文件代碼

CC1:警告:main.c中:文件:不是目錄 frequent.o [默認啓用]不承認:文件格式無法識別 collect2:錯誤:LD返回1個退出狀態 化妝:* [主]錯誤1

CC = gcc 
CPPFLAGS = -I 

main: main.c headers.h sortt.o frequent.o 
    #$(CC) $(CPPFLAGS) -c $^ -o [email protected] 
sortt.o: headers.h sortt.c 
    $(CC) $(CPPFLAGS) -c $< -o [email protected] 
frequent.o: headers.h frequent_word.c search_similar_word.o 
    $(CC) $(CPPFLAGS) -c $< -o [email protected] 

回答

0

您的規則很多誤區。爲什麼frequent.o列出了search_similar_word.o作爲先決條件?沒有理由不能在search_similar_word.o之前或同時建立frequent.o

此外,您在一個擴展爲第一要義的編譯行使用$<,但frequent.o的第一要義是headers.h,所以你要編譯headers.h這是錯誤的:你想編譯frequent_word.c

同上sortt.o

使用與源文件不同的名稱命名對象文件也很奇怪。

在你的CPPFLAGS你正在列出一個-I標誌,但你沒有給它任何參數:該標誌將目錄作爲參數。當你試圖鏈接最後一個對象時(我假設註釋字符#只是一個調試工件);最後,當你試圖鏈接最後一個對象時,你正在使用-c標誌。這是不正確的,因爲-c標誌告訴編譯器生成一個對象文件,並且不鏈接最終對象。

你的Makefile應該是這個樣子:

CC = gcc 
CPPFLAGS = -I . 

main: main.c headers.h sortt.o frequent.o 
     $(CC) $(CPPFLAGS) $^ -o [email protected] 
sortt.o: sortt.c headers.h 
     $(CC) $(CPPFLAGS) -c $< -o [email protected] 
frequent.o: frequent_word.c headers.h 
     $(CC) $(CPPFLAGS) -c $< -o [email protected] 

我不知道有search_similar_word.o做到,因爲它似乎並沒有要在構建任何地方使用。

+0

非常感謝,這是我第一次處理make文件,但是對於search_similar_word.o是freq中使用的一個函數,但是這些規則是我的make文件代碼的一個子... 我會跟着你guid line,我會看到,如果有錯誤會怎麼樣 –