Makefile找不到包含文件

时间:2013-08-25 10:37:48

标签: makefile

我有这样的文件夹结构。

Gif_Utility

- >生成文件

- > include(所有.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

另一方面,如果我这样做,它编译得很好 $化妆 - &GT;这会创建gif_display.o

我不知道为什么在指定规则时会抛出错误。我错过了什么,请帮忙。

我正在使用Ubuntu机器来构建我的代码。

1 个答案:

答案 0 :(得分: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)

这基本上使include的{​​{1}}分量变得多余。

相关问题