2015-10-15 65 views
0

我想運行一個簡單的makefile,看起來像這樣:Makefile的錯誤 - 鏈接器輸入文件未使用

T=-ansi -pedantic -Wall -Werror 
a.out: test.o extra.o 
    gcc $(T) -c test.o extra.o 

test.o: test.c test.h 
    gcc $(T) -c test.c 

extra.o: extra.c extra.h 
    gcc $(T) -c extra.c 

clean: 
    rm *.o a.out 

但我似乎得到警告,告訴我,「鏈接器輸入文件未使用的,因爲鏈接尚未完成「

我試圖消除‘從a.out的指令-c’,海灣合作委員會後,但產生的給我更多的問題。我不知道如何從這裏開始,任何想法/投入將不勝感激。

編輯:我的「讓-T」運行程序,也去除的a.out的-c,導致錯誤「無效的符號索引」

+0

對不起,我在運行它像「讓-T」,另外,如果我去掉-c,我得到的問題「無效的符號索引」 – user3739406

+0

查看答案......但'使-T'是奇數;那是做什麼的? '無效的符號索引'表明你應該刪除所有'.o'文件並且從頭再次運行。 –

+0

My Assigment指定使用通過T命令構建的makefile(makefile中的第一行)。 – user3739406

回答

0

您需要從a.out刪除-c命令:

a.out: test.o extra.o 
    gcc $(T) test.o extra.o 

,或者更好:

a.out: test.o extra.o 
    gcc $(T) -o [email protected] test.o extra.o 

,或者還更好:

extra: test.o extra.o 
    gcc $(T) -o [email protected] test.o extra.o 

錯誤消息通常是因爲您在命令行上指定了類似-lm的東西,其中-c,但您在這裏沒有這樣做。 OTOH,你列出所有與-c選擇目標文件 - 這會產生警告:

gcc -ansi -pedantic -Wall -Werror -c test.o extra.o 
           ^this one, here 

那些.o文件是連接器的輸入,但是你沒有連接。刪除-c,您將生成a.out。這應該繼續。

我覺得這是我第一次見過用來建立a.out一個makefile。這是極不尋常的 - 並非完全錯誤,但絕對不是您通常使用的方式make。它內置規則來構建從單一來源文件,如exampleexample.c程序。通常,您根據其中一個源文件爲程序提供一個有意義的名稱。請注意,創建程序test通常是一個糟糕的主意;在典型的shell中內置了一個標準的test命令,混淆非常猖獗。

相關問題