2012-10-14 184 views
0

我是使用makefiles並嘗試生成基本makefile作爲大學練習的一部分的新手。我有兩個源代碼文件,chello.c和writeexit.s,必須進行編譯/彙編,然後鏈接才能生成chello。Makefile不重建依賴關係

這是代碼我到目前爲止的生成文件:

chello: chello.o writeexit.o 
    ld -N chello.o writeexit.o -o chello 

chello.o: chello.c 
    gcc -c chello.c -o chello.o 

writeexit.o: writeexit.s 
    as writeexit.s -o writeexit.o 

之前LD,GCC的空白,併爲全部的標籤,所以我覺得whitespacing是罰款。當我調用'make makefile'時,它會返回'make:makefile'不需要做'。'但是,如果我更改chello的依賴關係(如chello.c),則會返回相同的消息,並且chello的行爲不會被修改。

+0

你是怎麼調用'make'的?這聽起來像你可能正在輸入'make makefile',而你應該輸入'make -f makefile'或者(除非你有一個名爲'Makefile'的文件在同一個目錄中潛伏),只需要'make'。 –

回答

0

在這裏的替代帳戶,它似乎工作正常,如果我只是調用「make」而不是「make makefile」。這個問題可以忽略。

+0

只是爲了補充一點,如果在調用make時沒有指定目標,它將構建文件中列出的第一個目標。正因爲如此,大多數Makefile的「全部」都將列爲第一個目標。 – ThePosey

2

man make

構建在makefile執行命令來更新一個或多個目標 名稱,其中名稱是通常的程序。如果沒有-f選項, make將按照該順序查找makefile GNUmakefile,makefile和Makefile, 。

make makefile將實際執行你「的Makefile」文件(因爲它是在手冊頁的默認名稱之列),試圖建立「Makefile文件」的目標(因爲爭論的你逝去的),這已存在

你需要的是打造 「chello」 二進制,所以你必須鍵入:

make chello

或者:

make -f makefile chello