一个奇怪的问题,关于Makefile的求助。
大家看看我这个Makefile 文件有什么问题?这些文件全部与makefile在同一个目录中。
#Makefile for MRRC
CC=gcc
CFLAGS=
HDFILE=
OBJS=
all:Desktop PlayWord PlayPicture PlayGif
DestTop:region.o Desktop.o
$(CC) $(CFLAGS) -o $@ Desktop.o region.o
PlayWord:PlayWord.o region.o
$(CC) $(CFLAGS) -o $@ PalyWord.o region.o
PlayPicture:PlayPicture.o region.o bmp.o picture.o
$(CC) $(CFLAGS) -o $@ PlayPicture.o region.o bmp.o picture.o
PlayGif:PlayGifPicture.o region.o picture.o gif.o lzwdecode.o
$(CC) $(CFLAGS) -o $@ PlayGifPicture.o region.o picture.o gif.o lzwdecode.o
Desktop.o:Desktop.c region.h
$(CC) $(CFLAGS) -c Desktop.c
PlayWord.o:PalyWord.c region.h
$(CC) $(CFLAGS) -c PlayWord.c
PalyPicture.o:PlayPicture.c region.h bmp.h picture.h
$(CC) $(CFLAGS) -c PlayPicture.c
region.o:region.c region.h
$(CC) $(CFLAGS) -c region.c
picture.o:picture.c picture.h
$(CC) $(CFLAGS) -c picture.c
bmp.o:bmp.c bmp.h
$(CC) $(CFLAGS) -c bmp.c
gif.o:gif.c gif.h lzwdecode.h
$(CC) $(CFLAGS) -c gif.c
lzwdecode.o:lzwdecode.c lzwdecode.h
$(CC) $(CFLAGS) -c lzwdecode.c
PlayGifPicture.o:PlayGifPicture.c PlayGifPicture.h
$(CC) $(CFLAGS) -c PlayGifPicture.c
clean:
rm -f *.o PlayWord PlayPicture Desktop PlayGifPicture
第一条规则DestTop:region.o Desktop.o 就出错了
好像region.o不能编译出来(Desktop.o 调用 region.o 的函数,错误提示函数没有定义)
我在shell下分别用如下三步则正常
gcc -c Desktop.o Desktop.c
gcc -c region.o region.c
gcc -o Desktop Desktop.o region.o
这是怎么回事?请指教。 Desktop 和DestTop的区别 DeskTop和DestTop,笔误
但我想这是一个新手写的Makefile,
整理之后这样写比较好:
#Makefile for MRRC
CC=gcc
CFLAGS=
HDFILE=
OBJS=
LDFLAGS=
.PHONY: all clean
all:Desktop PlayWord PlayPicture PlayGif
DeskTop:region.o Desktop.o
$(CC) -o $@ $^
PlayWord:PlayWord.o region.o
$(CC) -o $@ $^
PlayPicture:PlayPicture.o region.o bmp.o picture.o
$(CC) -o $@ $^
PlayGif:PlayGifPicture.o region.o picture.o gif.o lzwdecode.o
$(CC) -o $@ $^
Desktop.o:Desktop.c region.h
PlayWord.o:PalyWord.c region.h
PalyPicture.o:PlayPicture.c region.h bmp.h picture.h
region.o:region.c region.h
picture.o:picture.c picture.h
bmp.o:bmp.c bmp.h
gif.o:gif.c gif.h lzwdecode.h
lzwdecode.o:lzwdecode.c lzwdecode.h
PlayGifPicture.o:PlayGifPicture.c PlayGifPicture.h
clean:
rm -f *.o PlayWord PlayPicture Desktop PlayGifPicture
郁闷!确实是笔误,还有多处打字错误,现已经搞定。
cjaizss的方法看起来确实很简洁。应用了$^这个隐含的变量,当是我对这个变量没把我,刚才看了makefile 教程知道是依赖文件列表,但是它表示的依赖文件是否带有.o 还是只有.o前面的文件名,是不是会变化呢?依据你的写法是带有.o的。
还有上面部分的规则直接用-o 选项, 奇怪!因为后面的$^代表.o文件而不是.c文件。
后面一堆的规则也没有了命令,怎么回事? 有默认的命令
直接是
$(CC) $(CFLAGS) -c $< -o $@
[ 本帖最后由 anhongkui 于 2008-6-14 18:33 编辑 ]
页:
[1]