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

2012年(15)

2011年(2)

我的朋友

分类: 嵌入式

2012-01-15 09:12:41

一:基本Makefile的改进问题:
1)由文件中指定的.c文件到随时在目录中增加.c文件而不需要修改Makefile:
   使用wildcard函数
   以下是使用wildcard的一些说明:

   可见在变量定义和函数传参过程中通配符扩展比如"*.c"是不被支持的,故使用此函数。

2)变量被循环赋值的出现:
   在赋值时使用":="代替"="

  
递归型变量循环扩展直到原始值

简单型变量仅仅做简单的替换且可以用作给变量赋值“ ”空格“Tab”等

3)文件名字局部不同,比如要由.c获得相应的.o文件
   使用替换

基于此间三点,有如下Makefile0:
  1. #建立目录
  2. #构建源文件和目标文件,附加完整路径信息
  3. #写好依赖,附加执行语句

  4. .PHONY : all clean
  5.     
  6. MKDIR     =     mkdir
  7. RM        =     rm
  8. RMFILES =     -rf

  9. CC         =    gcc

  10. DIR_OBJS    =     objs
  11. DIR_EXES    =    exes
  12. DIRS        =    $(DIR_OBJS) $(DIR_EXES)                #两个目标写一块可以方便建立目录,目标文件之后不可以有任何空格,否则错误无法查阅
  13. EXE            =     complicated                            #最终目标

  14. SRCS    =    $(wildcard *.c)                            #方便.c文件的添加        
  15. OBJS    =    $(SRCS:.c=.o)                            #.c .o文件的准备*****************************技术
  16. OBJS    :=    $(addprefix $(DIR_OBJS)/,$(OBJS))        #加上目录,死循环???????? 不会!因为":="是不能被循环替代赋值的
  17. EXE        :=    $(addprefix $(DIR_EXES)/,$(EXE))

  18. all:$(DIRS) $(EXE)

  19. $(DIRS):                                            
  20.     $(MKDIR) $@

  21. $(EXE):$(OBJS)
  22.     $(CC) -o $@ $^

  23. $(DIR_OBJS)/%.o : %.c
  24.     $(CC) -o $@ -c $^

  25. clean:
  26.     $(RM) $(RMFILES) $(DIRS)





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