2013-06-04 66 views
0

我想寫一個Makefile,但它顯示 Make: Don't know how to make cc. Stop.寫自己的Makefile

我在做什麼是這樣的: - HELLO.C

#include<stdio.h> 
extern int print(); 
int main(){ 
print(); 
return 0; 
} 

print.c

#include<stdio.h> 
int print(){ 
printf("hello\n"); 
return 0; 
} 

Makefile文件

all: OUT 
OUT: cc Hello.o print.o -o OUT 
Hello.o: Hello.c\ 
     cc -c Hello.c 
print.o: print.c \ 
     cc -c print.c 
clean: rm -f *.o 
clobber: rm -f OUT 
當我作出書面 $>讓 製作

:不知道如何使CC。停止。

$> make clean Make:不知道如何製作RM。停止。

我錯過了什麼事情..

我是新手這個品牌和生成文件,所以請建議我在此

一些很好的教程,我改變了這個: -

all: OUT 

OUT:; @cc Hello.o print.o -o OUT 

Hello.o:; @cc -c Hello.c 

print.o:; @cc -c print.c 

clean:; @rm -f *.o 

clobber:; @rm -f OUT 

顯示錯誤: -

cc: warning 1913: Hello.o'不存在或無法讀取 cc:warning 1913:print.o' does not exist or cannot be read ld: I/O error, file "Hello.o": No such file or directory Fatal error. *** Error exit code 1

+0

您是否嘗試在網上搜索「makefile tutorial」? –

+0

如果您嘗試使用'Hello.o'來構建'OUT',那麼您必須告訴'Make','Hello.o'是一個依賴項。將該行更改爲:'OUT:Hello.o print.o; @cc ...'。但使用'\ n \ t'而不是'''作爲分隔符!公約是好的,只有在必要和充分理解的情況下才應該予以標榜。 –

+0

@WilliamPursell謝謝:) – avinashse

回答

4

的規則必須是在另一條線路比目標,縮進用硬標籤:

all: OUT 
OUT: Hello.o print.o 
     cc Hello.o print.o -o OUT 
Hello.o: Hello.c 
     cc -c Hello.c 
print.o: print.c 
     cc -c print.c 
clean: 
     rm -f *.o 
clobber: 
     rm -f OUT 

但是,這可以依靠隱含的規則來簡化並推廣使用了一些變量:

all: OUT 
OUT: Hello.o print.o 
     $(CC) $(CFLAGS) $^ -o [email protected] 
clean: 
     rm -f *.o 
clobber: 
     rm -f OUT 
+0

感謝您的回覆..但是顯示'Make:必須是規則第4行的分隔符。停止.'當我嘗試第一個解決方案時 – avinashse

+0

您必須使用製表符作爲縮進。如果你使用空格,你會得到一個非常類似於你所得到的錯誤。 –

+0

現在顯示: - 'CC:警告1913年:'Hello.o '不存在或無法讀取 CC:警告1913年:'print.o' 不存在或無法讀取 LD:I/O錯誤,文件「Hello.o」:沒有這樣的文件或目錄 致命錯誤.' – avinashse