2013-08-25 139 views
0

我有一個文件夾結構是這樣的。Makefile中沒有找到包含文件

Gif_Utility

- > Makefile的

- >包括(全部.h文件都在這裏)

- >(SRC所有.c文件都在這裏)。

我寫一個makefile。

Makefile 

VPATH = src:include 
INC = -I ./include 

gif_objects = gif_display.o \ 
      gif_lzw.o \ 
      gif_read.o \ 
      sysm.o \ 
      x86_main.o 


gif_display.0 : gif_display.c 
    gcc -I /export/home/joshis1/MakeTutorial/GIF_Utility/include -c $< 

#gif_lzw.0 : gif_lzw.c 
# gcc $(INC) -c src/gif_lzw.c 

#gif_read.0 : gif_read.c 
# gcc -I ./include/ -c $< 

#sysm_main.0 : sysm_main.c 
# gcc -I ./include/ -c $< 

#x86_main.0 : x86_main.c 
# gcc -I ./include/ -c $< 


On command prompt: 
$ make gif_display.o 

cc -c -o gif_display.o src/gif_display.c 
src/gif_display.c:2:17: fatal error: sysm.h: No such file or directory 
compilation terminated. 
make: *** [gif_display.o] Error 1 

在另一方面,如果我不喜歡這一點,編譯罰款 $使 - >此創建gif_display.o

我不知道爲什麼它被扔在指定規則的錯誤。我錯過了什麼,請幫助。

我使用Ubuntu機建立我的代碼。

回答

2

你的Makefile有.0(零)後綴,而不是正確的.o(信哦)。

當您運行只是make它試圖打造的第一個目標在Makefile中,因此其運行包含正確-I包含路徑的配方。它產生的.o文件,而不是一個.0文件,事實上是可以接受的make,但我想這至少可以打印警告在這種情況下。

當您運行make gif_display.o時,它將使用Make的內置製作.o文件,該文件不包含您的包含路徑。

鑑於make已經有.o文件的內置規則,您的規則基本上是多餘的。這將是更好的只是-I include參數添加到默認規則,喜歡的東西

CFLAGS += -I include 

所以整個的Makefile可以像這樣簡單:

VPATH = src:include 
CFLAGS += -I ./include 

gif_objects = gif_display.o \ 
      gif_lzw.o \ 
      gif_read.o \ 
      sysm.o \ 
      x86_main.o 

我沒有看到什麼提醒你的Makefile來改變.h文件,所以你可能要添加一個單獨依賴了點。如果你只是有你的所有對象文件之間的一些共享的頭文件,也許這將是你所需要的:

$(gif_objects): $(wildcard include/*.h) 

這基本上使VPATH多餘的include組件。