2013-08-25 97 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组件。