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.mk和autoconf.mk.dep;
2) autoconf.mk.dep是为了在顶层目录Makefile中生autoconf.mk所被包含;
3) 把include/common.h以及它所包含的头文件中的以“CONFIG_”为前缀的所有宏提取出来,按tools/scripts/define2mk.sed 宏处理规则来处理宏定义,并写入autoconf.mk文件,在make 命令编译源码的时候,包括autoconf.mk文件,形成源码或模块的编译规则,决定哪些模块编入镜像。
u-boot-2015.07 autoconf.mk生成过程分析的更多相关文章
- Myeclipse 2015 stable 1.0 完美破解方法(转自 http://yangl.net/2015/07/14/myeclipse_2015stable_1/)
Myeclipse 2015 stable 1.0 完美破解方法 http://yangl.net/2015/07/14/myeclipse_2015stable_1/ 破解包(注册机)下载地址:链接 ...
- Murano Weekly Meeting 2015.07.21
会议时间: 2015.07.21 主持人: Kirill Zaitsev, core from Mirantis 会议摘要: 1.murano client和murano dashboard升级到y ...
- Murano Weekly Meeting 2015.07.14
会议时间: 2015.07.14 主持人: Kirill Zaitsev, core from Mirantis 会议摘要: 1.periodic nightly builds,然后通过mailin ...
- spring boot是一个应用框架生成工具?
spring boot是一个应用框架生成工具?
- Spring Boot中使用Swagger CodeGen生成REST client
文章目录 什么是Open API规范定义文件呢? 生成Rest Client 在Spring Boot中使用 API Client 配置 使用Maven plugin 在线生成API Spring B ...
- Archlinux 2015.07.01 和 Windows7 双系统 安装教程
提前在windows7下给Archlinux预留一个分区,大小最好在20G以上(根据自己硬盘情况分配). 第一步,安装前的准备 从arch官网下载最新的ISO文件archlinux-2015.07.0 ...
- Spring boot中使用springfox来生成Swagger Specification小结
Rest接口对应Swagger Specification路径获取办法: 根据location的值获取api json描述文件 也许有同学会问,为什么搞的这么麻烦,api json描述文件不就是h ...
- linux 内核 zImage 生成过程分析
1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息.符号表的最初的内核,大小约23MB: arm ...
- spring boot中利用mybatis-generator插件生成代码
使用Idea在spring boot中集成mybatis-generator,自动生成mapper.xml model dao 文件 一.配置 pom.xml 在pom.xml的<plugi ...
随机推荐
- PHP & “Data” URL scheme(转)
基本上所有的对文件操作的API, 都迁移到的了PHP stream上, 所以, 绝大部分对文件操作的API都是支持Data URL的. 当某个API需要操作对象是文件的时候, 我们其实是可以采用Dat ...
- 用rm递归递归删除子目录下所有.o后缀文件
find . -name "*.o" | xargs rm -f 可以通过管道命令来操作,先find出主目录 下想删除的文件,然后通过“xargs”这个构造参数列表并运行命令 ...
- socket编程之obj压缩加密传输
因为需要序列化这个对象以便在网络上传输.所以POJO必需要实现java.io.Serializable接口.使用了 ObjectInputStream和ObjectOutputStream来接收和发送 ...
- jenkin构建项目执行脚本后,脚本中启动的进程也随之关闭的解决办法
问题描述: 之前用jenkins构建项目(maven项目)后都是通过ssh先将war文件推送到远程服务器,然后执行远程的脚本(更新项目,重启tomcat),一直没有出现问题,今天使用jenkins构建 ...
- JS通过身份证号获取生日、年龄、性别
<script> function IdCard(UUserCard,num){ if(num==1){ //获取出生日期 birth=UUserCard.substring(6, 10) ...
- R中的一些基础1106
1.R中NA,NaN,Inf代表什么? NA:缺失数据 NaN:无意义的数,比如sqrt(-2) Inf:正无穷大 -Inf:负无穷大 2.确定一个数值型vector的第一个最值(最大/最小)的下标: ...
- CSS实现文本超过指定长度显示省略号
<style type="text/css"> li { width:200px;/*宽度,超过即会溢出*/ line-height:25px;/*设置行间距*/ te ...
- XDU 1098 (欧拉函数模板题)
原题链接,点击此处 欧拉函数:φ(N)表示对一个正整数N,欧拉函数是小于N且与N互质的数的个数 通式:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/p ...
- server2003 IIS 错误 解决
网页无法打开总显示: 无法找到该页您正在搜索的页面可能已经删除.更名或暂时不可用. ---------------------------------------------------------- ...
- cdoj1587 失恋772002天
地址:http://acm.uestc.edu.cn/#/problem/show/1587 题目: 失恋772002天 Time Limit: 3000/1000MS (Java/Others) ...