pan139com 发表于 2008-06-14 17:22

一个奇怪的问题,关于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
这是怎么回事?请指教。

anhongkui 发表于 2008-06-14 17:40

Desktop 和DestTop的区别

cjaizss 发表于 2008-06-14 17:51

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

pan139com 发表于 2008-06-14 18:08

郁闷!确实是笔误,还有多处打字错误,现已经搞定。

cjaizss的方法看起来确实很简洁。应用了$^这个隐含的变量,当是我对这个变量没把我,刚才看了makefile 教程知道是依赖文件列表,但是它表示的依赖文件是否带有.o 还是只有.o前面的文件名,是不是会变化呢?依据你的写法是带有.o的。

还有上面部分的规则直接用-o 选项, 奇怪!因为后面的$^代表.o文件而不是.c文件。

后面一堆的规则也没有了命令,怎么回事?

anhongkui 发表于 2008-06-14 18:29

有默认的命令
直接是
$(CC) $(CFLAGS) -c $< -o $@

[ 本帖最后由 anhongkui 于 2008-6-14 18:33 编辑 ]
页: [1]
查看完整版本: 一个奇怪的问题,关于Makefile的求助。