Chinaunix首页 | 论坛 | 博客
  • 博客访问: 66714
  • 博文数量: 17
  • 博客积分: 263
  • 博客等级: 二等列兵
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-17 08:54
文章分类
文章存档

2012年(15)

2011年(2)

我的朋友

分类: 嵌入式

2012-01-15 18:53:56

Makefile3文件是对于几种依赖关系的写法的对比:
1)出错调试make all --debug=v
2).dep文件的生成方法(6条语句,这里用临时文件作为缓存)
   $(DIR_DEPS)/%.dep:%.c
    @echo "Creating $@ ..."        #临时文件作为中介居然被删除了两次
    @set -e; \
    $(RM) $(RMCMD) $@.tmp; \
    $(CC) -E -MM $^ > $@.tmp; \
    sed 's,\(.*\)\.o[ :]*,objs/\1.o: ,g' < $@.tmp > $@ ; \
    $(RM) $(RMCMD) $@.tmp
3)在某目录下生成.o文件的办法:
   $(dir)/%.o:prerequisite
  1. .PHONY:all clean

  2. CC            =        gcc
  3. RM            =        rm
  4. RMCMD        =        -rf
  5. MKDIR        =        mkdir

  6. DIR            =        objs exes deps
  7. DIR_OBJS    =        objs
  8. DIR_EXES    =        exes
  9. DIR_DEPS    =        deps
  10. SRCS        =        $(wildcard *.c)
  11. OBJS        =        $(SRCS:.c=.o)
  12. OBJS        :=        $(addprefix $(DIR_OBJS)/,$(OBJS))
  13. EXE            =        complicated
  14. EXE            :=        $(addprefix $(DIR_EXES)/,$(EXE))
  15. DEPS        =        $(SRCS:.c=.dep)
  16. DEPS        :=        $(addprefix $(DIR_DEPS)/,$(DEPS))

  17. all:$(DIR) $(DEPS) $(EXE)

  18. $(DIR):
  19.     $(MKDIR) $@

  20. #dep1)得到两个完全一样的依赖集合,这个和OBJS是一样的道理:目标集合与依赖集合变成了一对多的关系,应该是一对一的关系
  21. #$(DEPS):$(SRCS)
  22. #    $(CC) -E -MM $^ > $@

  23. #dep2)如下方案可以得到一对一关系的目标集合与依赖关系,但是不能加入.dep格式的文件,include会显示找不到文件,包含dep格式文件的操作会失败
  24. #$(DIR_DEPS)/%.dep:%.c
  25. #    $(CC) -E -MM $^ > $@

  26. #dep3)如下方案与上面的方案一样可以生成一对一关系的目标集合与依赖集合,但是仍然需要include且直接include会失败
  27. $(DIR_DEPS)/%.dep:%.c
  28.     @echo "Creating $@ ..."        #临时文件作为中介居然被删除了两次
  29.     @set -e; \
  30.     $(RM) $(RMCMD) $@.tmp; \
  31.     $(CC) -E -MM $^ > $@.tmp; \
  32.     sed 's,\(.*\)\.o[ :]*,objs/\1.o: ,g' < $@.tmp > $@ ; \
  33.     $(RM) $(RMCMD) $@.tmp

  34. include $(DEPS)

  35. #如下方案可以在目录下生成所有.o文件
  36. #$(DIR_OBJS)/%.o:%.c
  37. #    $(CC) -o $@ -c $^

  38. #但是如下方法却有问题:原因在于他没有一一对应的关系,比如一个Hello.o会依赖Hello.c和main_hello.c两个文件
  39. #$(OBJS):$(SRCS)
  40. #    $(CC) -o $@ -c $^

  41. $(EXE):$(OBJS)
  42.     $(CC) -o $@ $^

  43. clean:$(DIR)
  44.     $(RM) $(RMCMD) $^
Makefile3
阅读(1257) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~