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中.
u-boot之autoconf.mk解析相关推荐
- 深入boot.img格式文件结构解析
以msm8226为例,讲解android源码编译生成boot.img的结构.boot.img包括boot.img header.kernel以及ramdisk文件系统.下面是对boot.img的结构进 ...
- autoconf.mk详析
uboot的顶层Makefile中有如下的一段代码 [plain] view plaincopy # # Auto-generate the autoconf.mk file (which is in ...
- Spring Boot(18)---启动原理解析
Spring Boot(18)---启动原理解析 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会 ...
- Android.mk解析与使用
Android.mk解析与使用 一.Android.mk文件的作用 二.简单示例 三.详细解析 1. 定义当前模块的位置 2. 清除LOCAL_XXX变量 3. 需要编译的文件 4. 定义编译生成的模 ...
- 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
[原创文章,转载请注明出处] 个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析 ...
- Spring+Spring Boot+Mybatis框架注解解析
Restful 风格下的Spring Boot的注解开发 电商网站经常用到的restful风格 ,只是一种开发思想,不是开发框架,现在的技术并没有完全实现restful风格. restful风格是一种 ...
- Spring boot + Jsoup 搭建高清视频解析系统接口只需1分钟
点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...
- Spring Boot自动装配过程解析及简单Demo演示
文章目录 1.约定大于配置 2.自动装配原理 2.1.`@SpringBootApplication` 2.2.`@EnableAutoConfiguration` 2.3.`@Import` 2.4 ...
- Android.mk解析
一.变量说明: 1.LOCAL_PATH:= $(call my-dir) 此行代码在Android.mk的开头,用于给出当前文件的路径 LOCAL_PATH 用于在开发树中查找源文件 宏函数'my- ...
最新文章
- 集群理论讲解(续三)
- [CSAcademy]Virus on a Tree
- 算法----------加一
- 关于main函数的(int argc,char *argv[])
- 通过命令行形式编译QT源程序
- python下载文件的几种常用方法
- 我们在PMCAFF上偷偷上线了这个
- python 字典的一些简单操作
- 甲骨文将Exadata Cloud转化为内部软件包
- java没有timer类_Java中的Java.util.Timer类 - Break易站
- 支付宝蚂蚁森林入选2019年世界环境日实践案例
- 小技巧 ----- 关于Java中的System.arraycopy()
- shell中变量的引用(两种方式:$变量名,${变量名})。
- 关于wait、notify在火车售票战的实例
- asp.net千奇百怪的日历
- linux的pending状态怎么退出,状态显示Pending Contract
- mysql中加号变成空格了_从数据库中读取字符串时其中的空格变成加号
- 基于Java平台实现发送短信功能
- 幼儿园故事导入语案例_幼儿园大班语言故事
- 一张图搞懂什么是M0、M1 、M2