u-boot之autoconf.mk解析

一、执行make首先包含

 

all:

sinclude $(obj)include/autoconf.mk.dep  (包含了include/autoconf.mk目标)

sinclude $(obj)include/autoconf.mk   (包含了配置)

二、生成规则

 

#  
# Auto-generate the autoconf.mk file (which is included by all makefiles)  
#  
# This target actually generates 2 files; autoconf.mk and autoconf.mk.dep.  
# the dep file is only include in this top level makefile to determine when  
# to regenerate the autoconf.mk file.  
$(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h  
    @$(XECHO) Generating $@ ; \  
    set -e ; \  
    : Generate the dependancies ; \  
    $(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) \  
        -MQ $(obj)include/autoconf.mk include/common.h > $@  
  
$(obj)include/autoconf.mk: $(obj)include/config.h  
    @$(XECHO) Generating $@ ; \  
    set -e ; \  
    : Extract the config macros ; \  
    $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \  
        sed -n -f tools/scripts/define2mk.sed > $@.tmp && \  
    mv $@.tmp $@  

 

先看第一个: $(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h, 它表示autoconf.mk.dep依赖于config.h和common.h这两个文件.

  • @$(XECHO) Generating $@ ; \ 这句话会在编译阶段输出编译信息 Generating include/autoconf.mk.dep
  • set -e ; \ 这句话表示, 当下面命令返回值不会0时, 整个脚本立即停止退出
  • : Generate the dependancies ; \  没有明白是啥意思~~
  • $(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) -MQ $(obj)include/autoconf.mk include/common.h > $@
    • -DDO_DEPS_ONLY: 设置flag, 具体来说, 我们可以在common.h里面看见#ifdef DO_DEPS_ONLY这样的语句, 这个-D就表示DO_DEPS_ONLY被定义了
    • -M : 表示生成依赖关系. 我还专门做了个实验, 如下
      • gcc -M main.c 输出结果为 main.o: main.c
    • -MQ: 表示指定依赖关系中target的名称, 看下面的实验
      • gcc -M -MQ newname.mk main.c 输出结果为 newname.mk: main.c
    • 这句话表示: 生成依赖关系 include/autoconf.mk: include/common.h, 结果最终输出到include/autoconf.mk.dep
  • 打开编译后生成的include/autoconf.mk.dep, 可以查阅里面的内容. 至于为什么需要生成这个文件, 我现在还不清楚.

 

再看第二个: $(obj)include/autoconf.mk: $(obj)include/config.h, 它表示autoconf.mk依赖于include/config.h这个文件

  • @$(XECHO) Generating $@ ; \ 这句话会在编译阶段输出编译信息Generating include/autoconf.mk
  • set -e; \ 同上
  • $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | sed -n -f tools/scripts/define2mk.sed > $@.tmp && mv $@.tmp $@
    • -DDO_DEPS_ONLY: 同上
    • -dM : 作用是输出include/common.h中定义的所有宏
    • |      : shell中的管道, 表示将前面的结果传递给后面的命令
    • define2mk.sed : 查找和处理以“CONFIG_”开头的宏定义的功能, 将处理的结果输出到include/autoconf.mk.tmp
    • mv $@.tmp $@ : 重命名为include/autoconf.mk. 
    • 最终就会生成include/autoconf.mk
  •  include/common.h文件包含了include/config.h文件,而include/config.h文件又包含了config_defaults.h等uboot下的通用头文件, 还会包含<configs/${CONFIG_NAME}.h>, 这个.h是我们自己创建的, 可以在里面添加自己的"CONFIG_"宏定义. 已决定开启哪些功能.

    至此, 我们知道, 系统中所有的"CONFIG_"开头的宏开关, 都被放到了include/autoconf.mk中. 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值