u-boot-2015.07 autoconf.mk生成过程分析

1、u-boot2015.7版本编译没有在顶层目录中生成.config文件,而生成了include/autoconf.mk和include/autoconf.mk.dep两个文件,并在每个模块编译的时候包含着两个文件,作用相当于高版本u-boot中的.config文件。

 

2、autoconf.mk的生成过程

在顶层目录下的Makefile中:

…
1110 quiet_cmd_autoconf_dep = GEN     $@     # log中打印:GEN  include/autoconf.mk.dep
1111      cmd_autoconf_dep = $(CC) -x c -DDO_DEPS_ONLY -M $(c_flags) \
1112     -MQ include/autoconf.mk $(srctree)/include/common.h > $@ || rm $@
# -DDO_DEPS_ONLY -> #define DO_DEPS_ONLY
    # -M生成依赖关系,如:gcc –M main.c -> main.o : main.c /usr/include/xx1.h /usr/include/xx2.h …
# -MQ 指定依赖关系中的目标名字
# -M -MQ include/autoconf.mk include/common.h -> include/autoconf.mk :  include/common.h
# > $@ 结合1114、1115两行代码分析,将以上依赖关系写到目标文件autoconf.mk.dep
# || 如果前面命令返回失败,执行rm $@,即rm autoconf.mk.dep,否则不执行。
1113
1114 include/autoconf.mk.dep: include/config.h include/common.h
1115     $(call cmd,autoconf_dep)           # $(call <expression>,parm1,parm2,…) 调用cmd_autoconf_dep命令
1116 
1117 quiet_cmd_autoconf = GEN     $@        # log中打印:GEN  include/autoconf.mk
1118      cmd_autoconf = \
1119     $(CPP) $(c_flags) -DDO_DEPS_ONLY -dM $(srctree)/ include/common.h > $@.tmp && \ 1120 sed -n -f $(srctree)/tools/scripts/define2mk.sed $@.tmp > $@; \ 1121 rm $@.tmp # -dM 输出include/common.h中所有的宏定义到include/autoconf.mk.tmp文件 # && 如果前面的命令成功,执行下一步,否则不执行 # tools/scripts/define2mk.sed 宏处理规则,处理以“#define CONFIG_”为前缀的所有宏 # sed -n -f tools/scripts/define2mk.sed $@.tmp > $@ 取出include/autoconf.mk.tmp文件 # 以“#define CONFIG_”为前缀的所有宏,按define2mk.sed 宏处理规则处理后写入include/autoconf.mk 1122 1123 include/autoconf.mk: include/config.h 1124 $(call cmd,autoconf) # 调用cmd_autoconf命令

以上两段代码可以简化为:

include/autoconf.mk.dep: include/config.h include/common.h
         @echo GEN     $@
         $(CC) -x c -DDO_DEPS_ONLY -M $(c_flags) \
                   -MQ include/autoconf.mk $(srctree)/include/common.h > $@ || rm $@

include/autoconf.mk: include/config.h
         @echo GEN     $@
         $(CPP) $(c_flags) -DDO_DEPS_ONLY -dM $(srctree)/ include/common.h > $@.tmp && \
         sed -n -f $(srctree)/tools/scripts/define2mk.sed $@.tmp > $@; \
         rm $@.tmp

 

3、总结

这段代码都做了些什么,有什么用:

1)       生成了两个文件autoconf.mkautoconf.mk.dep

2)       autoconf.mk.dep是为了在顶层目录Makefile中生autoconf.mk所被包含;

3)       把include/common.h以及它所包含的头文件中的以“CONFIG_”为前缀的所有宏提取出来,按tools/scripts/define2mk.sed 宏处理规则来处理宏定义,并写入autoconf.mk文件,在make 命令编译源码的时候,包括autoconf.mk文件,形成源码或模块的编译规则,决定哪些模块编入镜像。

转载于:https://www.cnblogs.com/guanguangreat/p/10240920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值