一、执行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中.

u-boot之autoconf.mk解析相关推荐

  1. 深入boot.img格式文件结构解析

    以msm8226为例,讲解android源码编译生成boot.img的结构.boot.img包括boot.img header.kernel以及ramdisk文件系统.下面是对boot.img的结构进 ...

  2. autoconf.mk详析

    uboot的顶层Makefile中有如下的一段代码 [plain] view plaincopy # # Auto-generate the autoconf.mk file (which is in ...

  3. Spring Boot(18)---启动原理解析

    Spring Boot(18)---启动原理解析 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会 ...

  4. Android.mk解析与使用

    Android.mk解析与使用 一.Android.mk文件的作用 二.简单示例 三.详细解析 1. 定义当前模块的位置 2. 清除LOCAL_XXX变量 3. 需要编译的文件 4. 定义编译生成的模 ...

  5. 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】

    [原创文章,转载请注明出处] 个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析 ...

  6. Spring+Spring Boot+Mybatis框架注解解析

    Restful 风格下的Spring Boot的注解开发 电商网站经常用到的restful风格 ,只是一种开发思想,不是开发框架,现在的技术并没有完全实现restful风格. restful风格是一种 ...

  7. Spring boot + Jsoup 搭建高清视频解析系统接口只需1分钟

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  8. Spring Boot自动装配过程解析及简单Demo演示

    文章目录 1.约定大于配置 2.自动装配原理 2.1.`@SpringBootApplication` 2.2.`@EnableAutoConfiguration` 2.3.`@Import` 2.4 ...

  9. Android.mk解析

    一.变量说明: 1.LOCAL_PATH:= $(call my-dir) 此行代码在Android.mk的开头,用于给出当前文件的路径 LOCAL_PATH 用于在开发树中查找源文件 宏函数'my- ...

最新文章

  1. 集群理论讲解(续三)
  2. [CSAcademy]Virus on a Tree
  3. 算法----------加一
  4. 关于main函数的(int argc,char *argv[])
  5. 通过命令行形式编译QT源程序
  6. python下载文件的几种常用方法
  7. 我们在PMCAFF上偷偷上线了这个
  8. python 字典的一些简单操作
  9. 甲骨文将Exadata Cloud转化为内部软件包
  10. java没有timer类_Java中的Java.util.Timer类 - Break易站
  11. 支付宝蚂蚁森林入选2019年世界环境日实践案例
  12. 小技巧 ----- 关于Java中的System.arraycopy()
  13. shell中变量的引用(两种方式:$变量名,${变量名})。
  14. 关于wait、notify在火车售票战的实例
  15. asp.net千奇百怪的日历
  16. linux的pending状态怎么退出,状态显示Pending Contract
  17. mysql中加号变成空格了_从数据库中读取字符串时其中的空格变成加号
  18. 基于Java平台实现发送短信功能
  19. 幼儿园故事导入语案例_幼儿园大班语言故事
  20. 一张图搞懂什么是M0、M1 、M2

热门文章

  1. 【数据结构笔记37】表排序与物理排序
  2. python修改zabbix中的ip
  3. html 音频格式,html5中audio支持音频格式
  4. 详解linux运维工程师入门级必备技能
  5. System Verilog线程——fork join的理解使用
  6. 我知道真相,但我仍然勇往直前
  7. LA 2572 Viva Confetti (Geometry.Circle)
  8. 基于买方意向的货物撮合交易_CCF货物撮合交易赛题 Baseline
  9. ×××技术漫谈之IPSec(附MPLS)
  10. python学习--关注容易被忽略的知识点--(二)函数