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

2012年(15)

2011年(2)

我的朋友

分类: 嵌入式

2012-01-15 19:27:47

Makefile5解决了头文件中添加头文件的时候直接修改后make all无效的问题
1)Hello.h里面引用了other.h修改other.h没效果
   为.dep文件生成依赖关系,在.o与.c文件的依赖关系生成好了要修改目录的时候顺便把.dep文件也加进去
2)make clean两次发现结果不同,第二次居然重构了目标集合然后删除
   为重复的部分加入条件执行,比如是include 部分重复了,则为include加入条件

  1. .PHONY:all clean

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

  6. DIR_OBJS    =        objs
  7. DIR_EXES    =        exes
  8. DIR_DEPS    =        deps
  9. DIR            =        $(DIR_OBJS) $(DIR_EXES) $(DIR_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. ifeq ("$(wildcard $(DIR_OBJS))", "")
  18. DEP_DIR_OBJS := $(DIR_OBJS)
  19. endif

  20. ifeq ("$(wildcard $(DIR_EXES))", "")
  21. DEP_DIR_EXES := $(DIR_EXES)
  22. endif

  23. ifeq ("$(wildcard $(DIR_DEPS))", "")
  24. DEP_DIR_DEPS := $(DIR_DEPS)
  25. endif

  26. all:$(EXE)

  27. $(DIR):
  28.     $(MKDIR) $@

  29. #1)sed中无$@的情况:生成%.o文件的依赖关系;
  30. #2)sed中有$@的情况:生成%.o和%.dep文件的依赖关系;
  31. $(DIR_DEPS)/%.dep:$(DEP_DIR_DEPS) %.c
  32.     @echo "Creating $@ ..."        
  33.     @set -e; \
  34.     $(RM) $(RMCMD) $@.tmp; \
  35.     $(CC) -E -MM $^ > $@.tmp; \
  36.     sed 's,\(.*\)\.o[ :]*,objs/\1.o $@: ,g' < $@.tmp > $@ ; \
  37.     $(RM) $(RMCMD) $@.tmp

  38. #连续两次make clean得到的结果是一次仅仅做了删除的事,另一次却创建了$(DEPS)文件,故条件执行include
  39. #仅在当前构建的目标名不是clean时才include
  40. ifneq ($(MAKECMDGOALS),clean)
  41. include $(DEPS)
  42. endif

  43. $(EXE):$(DEP_DIR_EXES) $(OBJS)
  44.     $(CC) -o $@ $(filter %.o,$^)
  45. $(DIR_OBJS)/%.o:$(DEP_DIR_OBJS) %.c
  46.     $(CC) -o $@ -c $(filter %.c,$^)

  47. clean:
  48.     $(RM) $(RMCMD) $(DIR)
Makefile5

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