免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2260 | 回复: 4
打印 上一主题 下一主题

一个奇怪的问题,关于Makefile的求助。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-14 17:22 |只看该作者 |倒序浏览
大家看看我这个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
这是怎么回事?请指教。

论坛徽章:
0
2 [报告]
发表于 2008-06-14 17:40 |只看该作者
Desktop 和DestTop的区别

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2008-06-14 17:51 |只看该作者
DeskTop和DestTop,笔误
但我想这是一个新手写的Makefile,
整理之后这样写比较好:

  1. #Makefile for MRRC

  2. CC=gcc
  3. CFLAGS=
  4. HDFILE=
  5. OBJS=
  6. LDFLAGS=

  7. .PHONY: all clean
  8. all:Desktop PlayWord PlayPicture PlayGif


  9. DeskTop:region.o Desktop.o
  10.         $(CC) -o $@ $^
  11. PlayWord:PlayWord.o region.o
  12.         $(CC) -o $@ $^
  13. PlayPicture:PlayPicture.o region.o bmp.o picture.o
  14.         $(CC) -o $@ $^
  15. PlayGif:PlayGifPicture.o region.o picture.o gif.o lzwdecode.o
  16.         $(CC) -o $@ $^

  17. Desktop.o:Desktop.c region.h
  18. PlayWord.o:PalyWord.c region.h
  19. PalyPicture.o:PlayPicture.c region.h bmp.h picture.h
  20. region.o:region.c region.h
  21. picture.o:picture.c picture.h
  22. bmp.o:bmp.c bmp.h
  23. gif.o:gif.c gif.h lzwdecode.h
  24. lzwdecode.o:lzwdecode.c lzwdecode.h
  25. PlayGifPicture.o:PlayGifPicture.c PlayGifPicture.h

  26. clean:
  27.         rm -f *.o PlayWord PlayPicture Desktop PlayGifPicture

复制代码

论坛徽章:
0
4 [报告]
发表于 2008-06-14 18:08 |只看该作者
郁闷!确实是笔误,还有多处打字错误,现已经搞定。

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

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

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

论坛徽章:
0
5 [报告]
发表于 2008-06-14 18:29 |只看该作者
有默认的命令
直接是
$(CC) $(CFLAGS) -c $< -o $@

[ 本帖最后由 anhongkui 于 2008-6-14 18:33 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP