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 ...
随机推荐
- C#中Datatable和List互相转换
其实早就该写的,哈哈,不过今天刚想起来注册,热热手,就写一下,哈哈. 直接上内容吧: 建立一个控制台应用程序, List<students> Studentlist = new List& ...
- window7修改hosts文件
以管理员身份登录系统 ,修改 C:\Windows\System32\drivers\etc\hosts文件, 在最下面加入类似 192.168.80.10 master192.168.80.11 s ...
- LInux下桥接模式详解二
上篇文章导入博客园的比较早,而这篇自己在写的时候才发现内部复杂的很,以至于没能按时完成,造成两篇文章的间隔时间有点长! 话不多说,言归正传! 前面的文章介绍了桥接模式下的基础理论知识,其实本节想结合L ...
- Git查看、删除远程分支和tag
本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供markdown格式源码,欢迎使 ...
- 21.如何将java类对象转化为json字符串
使用阿里巴巴的fastJson 下载链接: 链接: https://pan.baidu.com/s/1dHjLOm1 密码: rr3w 用法如下: User user = new User(); us ...
- Tomcat启动慢但是不报错的解决办法
参考文章:https://blog.csdn.net/xiaoxinyu316/article/details/39064003 可以查看下tomat的启动日志,看看有哪些比较耗时的操作: grep ...
- Flask组件 flask_session
flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如: redis memcac ...
- 实现:左边为菜单导航,当一个菜单中包含多个Tabs,并且不同的Tab要根据权限的不同显示。
1.前台代码 //当点击左侧菜单时,将访问Controller中的Home方法,这样就会根据用户权限的不同,通过后台的判断来决定显示的页面<li class="@(ViewBag.Se ...
- 最值得阅读学习的 10 个 C 语言开源项目代码
1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连 ...
- 解决Ubuntu sudo apt-get install遇到的E: Sub-process /usr/bin/dpkg returned an error code (1)问题
如题,本人在安装samba等软件的时候,在命令行敲入: sudo apt-get install samba4命令的时候,系统在下载之后报错,大致内容如下: ~$ sudo apt-get insta ...