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

2012年(15)

2011年(2)

我的朋友

分类: 嵌入式

2012-01-15 17:20:15

Makefile2文件开始引入规范的写法,解决问题如下:
1)目标与依赖集合之间的一对一关系的建立和一对多关系的排除:
   使用%.o:%.c代替简单变量
2)使用gcc自动生成依赖关系并放到.dep文件中,但需要Include,而在Include的执行在Makefile的
   第一阶段,这个时候.dep文件还没有生成,故需要添加.dep文件的生成方法及依赖关系
3)Include除了加入其他的Makefile的功能(类似宏)以外还有可以根据依赖关系自动生成文件的功能

  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. #如下方案会重复生成依赖关系,得到两个完全一样的依赖集合,这个和OBJS是一样的道理:目标集合与依赖集合变成了一对多的关系,应该是一对一的关系
  21. #$(DEPS):$(SRCS)
  22. #    $(CC) -E -MM $^ > $@

  23. #如下方案可行,但是不能加入.dep格式的文件,include会显示找不到文件,包含dep格式的文件会失败
  24. $(DIR_DEPS)/%.dep:%.c
  25.     $(CC) -E -MM $^ > $@

  26. #include $(DEPS)

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

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

  33. $(EXE):$(OBJS)
  34.     $(CC) -o $@ $^

  35. clean:$(DIR)
  36.     $(RM) $(RMCMD) $^
Makefile2

阅读(1516) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~