CONFIG_*头文件的配置
通常在kernel或uboot中, 有很多以CONFIG_*开头的宏配置选项,并且保存在相应的头文件中,那么这些CONFIG_*是怎么生成的呢?
在uboot的顶层Makefile中,有这么一项:

此段的作用就是将相关头文件中的宏CONFIG_*保存在include/autoconf.mk中。
涉及两个大类:
1. gcc 的预处理选项:-dM
不做实际的预处理,仅仅列出所有#define的宏,这些宏大部分与体系结构和GNU相关,或来自所包含的头文件。
2.sed
通过sed,将所有输出的宏过滤,得到需要的宏。
示例:
test.h
#include <stdio.h>
#define CONFIG_SERIAL_MULTI 1
# define CONFIG_AAA
#define CONFIG_CACHE_LINE_SIZE (64)
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#define ROUND(a,b) (((a) + (b) - 1) & ~((b) - 1))
#define CONFIG_HAS_POST
#define CONFIG_____
#define CONFIG_a "HELLO WORLD"
#define CONFIG_B "123"
define2mk.sed
#
# Sed script to parse CPP macros and generate output usable by make
#
# It is expected that this script is fed the output of 'gpp -dM'
# which preprocesses the common.h header files and outputs the final
# list of CPP macros (and whitespace is sanitized)
# # Only process values prefixed with #define CONFIG_
/^#define CONFIG_[A-Za-z0-9_][A-Za-z0-9_]*/ {
## Strip the #define prefix
s/#define *//;
# Change to form CONFIG_*=VALUE
s/ */=/;
## Drop trailing spaces
s/ *$//;
## drop quotes around string values
s/="\(.*\)"$/=\/;
## Concatenate string values
s/" *"//g;
## Assume strings as default - add quotes around values
s/=\(..*\)/="\1"/;
## but remove again from decimal numbers
s/="\([0-9][0-9]*\)"/=\/;
## ... and from hex numbers
s/="\(0[Xx][0-9a-fA-F][0-9a-fA-F]*\)"/=\/;
## Change '' and empty values to "y" (not perfect, but
## supports conditional compilation in the makefiles
s/=$/=y/;
s/=$/=y/;
# print the line
p
}
执行gcc -E -dM test.h | sed -n -f define2mk.sed,得到

对于define2mk.sed的说明:
-f <script文件>或--file=<script文件>:以选项中指定的script文件来处理输入
-n 仅显示<script>处理后的结果,如果没有加上这个选项,没有被处理的输入行也会被输出。
/^#define CONFIG_[A-Za-z0-9_][A-Za-z0-9_]*/---这一部分表示由 #define CONFIG_[任意字母数字下划线][任意字母数字下划线]的任意字符串开头的宏定义 将会被替换处理
CONFIG_*头文件的配置的更多相关文章
- KEIL中头文件使用配置向导
在xxx.h头文件的代码中夹杂的“<h> </h>”.“<o>”“<i>”.“<c1> </c>”和“<e& ...
- UNIX环境高级编程 apue.h头文件的配置
http://jimslinbing.blog.163.com/blog/static/85054319201292712414518/ 1.到http://www.apuebook.com下载源码2 ...
- Spring的配置文件ApplicationContext.xml配置头文件解析
Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applica ...
- cmake之Visual studio无法显示头文件
本文演示cmake版本:3.18 1. 问题 使用cmake创建的Visual Studio 项目都没有显示头文件, 比如: 可以清楚的看见,项目lib_pipe没有显示头文件 2. 配置CMakeL ...
- 配置apue的头文件apue.h和unp的头文件anp.h
配置apue的头文件apue.h和unp的头文件anp.h 如果要使用gcc -g 来生成可调试文件一定要修改Make.defines.linux文件中的CFLAGS变量 修改为:CFLAGS=-an ...
- 【转】【Raspberry Pi】Unix NetWork Programming:配置unp.h头文件环境
一.初衷 近期正在做网络计算编程的作业.要求平台为unix/linux,想着Raspberry Pi装的Debian系统也是Linux改的,也应该能够勉强用着,所以就用它来做作业了! 二.说明 先把环 ...
- 驱动lx4f120h,头文件配置,没有完全吃透,望指点
来了块开发板,没接触过,希望能驱动起来,就首先试一下驱动LED,没想到刚开始建好工程问题就来了 使用GPIO驱动,首先想到的是关于GPIO的头文件gpio.h,事实上这个还不够,还需要设置一下系统的配 ...
- Qt工程pro文件的简单配置(尤其是第三方头文件和库)
Qt开发中,pro文件是对正工程所有源码.编译.资源.目录等的全方位配置的唯一方式,pro文件的编写非常重要,以下对几个重要项进行说明(win和linux,mac平台通用配置) 注释 以”#”开始的行 ...
- GCC 环境变量 & eclipse CDT 头文件配置
转:http://blog.csdn.net/statdm/article/details/7751000 GCC 环境变量 & eclipse CDT 头文件配置 在unix 下使用e ...
随机推荐
- 【贪心】【DFS】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) C. Andryusha and Colored Balloons
从任意点出发,贪心染色即可. #include<cstdio> #include<algorithm> using namespace std; int v[200010< ...
- 【点分治】bzoj1316 树上的询问
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; #defin ...
- 1.3(学习笔记)Servlet获取表单数据
一.Servlet获取表单数据 表单提交数据经由Servlet处理,返回一个处理结果显示在页面上, 那么如何获取表单提交的参数进出相应的处理呢? 主要用到以下方法: String getParame ...
- JavaSE目录
常识,环境变量,注释 标示符,常量,进制转换,类型转换,位运算符,语句 数组,函数 面向对象 多线程 String 包装类 集合 其他对象 IO流,IO流--FileReader&&F ...
- 用fastjson反序列化 带泛型的类
ServiceResult<User> serviceResult = JSON.parseObject(obtainResult, new TypeReference<Servic ...
- Microsoft office(1)分页符和分节符
Microsoft office下的页面布局中的分页符和分节符的区别: 分页符:标记一页的终止并开始下一页的点 分节符:插入分节符并在下一页开始新节 一般情况下,分节符在分页符外围,分节符一般是各种格 ...
- css3动画和JS+DOM动画和JS+canvas动画比较
css3兼容:IE10+.FF.oprea(animation):safari.chrome(-webkit-animation) js+dom:没有兼容问题: js+canvas:IE9+:(性能最 ...
- FL2440 rt3070模块station模式移植
---------------------------------------------------------------------------------------------------- ...
- 在eclipse上配置tomcat
Eclipse中Tomcat的配置及简单例子 Eclipse中Tomcat的配置是很简单的一个工作,作为一名刚刚起步的编程菜鸟,我将这个配置的过程和简单的例子写下来记录,也希望能给像我怎样的新手一些帮 ...
- Anaconda 介绍及安装
一.前言 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython ...