关于makefile的rules.mk 解读

本文介绍U-Boot中依赖文件.depend的生成过程,详细解释了rules.mk文件中依赖关系的构建方法及其如何通过Makefile生成文件依赖关系。

在linux kernel与Uboot中,rules.mk 被包含到没有子目录的makefile文件中,用于产生文件依赖关系文件.depend文件,下面我们看一下uboot的rules.mk文件:

 

_depend: $(obj).depend

$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(SRCS) $(HOSTSRCS)    //描述.depend 的依赖关系
  @rm -f $@                                                                                                     //强制删掉所有的目标文件,即*.depend文件
  @touch $@                                                                                                   //强制更新目标文件属性,以便使文件过期  
  @for f in $(SRCS); do /                                                                                  //for循环读取子目录下的文件
   g=`basename $$f | sed -e 's//(.*/)/./w//1.o/'`; /                                       

   //这一段比较难懂,我们把它分开来看,“basename $$f” 代表去变量$f的文件名,去掉路径等信息。“$f”为SRCS目录下的具体文  

//件。“|”为管道描述,“sed -e 's//(.*/)/./w//1.o/'`”为一个sed命令的文本处理部分,”-e“ 命令行,"s/.../.."为替换命令,

//“/(.*/)/./w”代表匹配任意除换行符开始的任意长度的字符接着是”.“字符最后是一个匹配字母或数字或下划线或汉字,"//1.O/" /1为前

//面的.*/匹配字符串 ,".O"加上.o。简单的说,此句实现的功能为将一个源文件替换为一个.o的OBJ文件,e.g..将一个.c的问题变成.o文件.

//对于这一部分如果仍然不是很清楚,可以看一下正则表达式文档。。。

   $(CC) -M $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; /

//产生依靠文件
  done
  @for f in $(HOSTSRCS); do /
   g=`basename $$f | sed -e 's//(.*/)/./w//1.o/'`; /
   $(HOSTCC) -M $(HOSTCPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; /
  done

 

//下面为.c编译规则

$(HOSTOBJS): $(obj)%.o: %.c
 $(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c
$(NOPEDOBJS): $(obj)%.o: %.c
 $(HOSTCC) $(HOSTCFLAGS_NOPED) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值