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 ...
随机推荐
- [BZOJ4897][THUSC2016]成绩单(DP)
4897: [Thu Summer Camp2016]成绩单 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 220 Solved: 132[Subm ...
- [POJ1801]Formula Racing(模拟)
Formula Racing Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 289 Accepted: 77 Descr ...
- HDOJ 5009 Paint Pearls
Dicripntion Lee has a string of n pearls. In the beginning, all the pearls have no color. He plans t ...
- Scala零基础教学【41-60】
第41讲:List继承体系实现内幕和方法操作源码揭秘 def main(args: Array[String]) { /** * List继承体系实现内幕和方法操作源码揭秘 * * List本身是一个 ...
- Swift数独游戏优化——C++与OC混编、plist自动生成
一.为什么要C++与OC混编? 在我之前的数独游戏中涉及到的数独游戏生成算法是参考的网上其他人的算法,是利用C++来实现的. 但是在我的例子中我发现这样存在一定的局限性: 1.我是利用Termin ...
- IntelliJ IDEA字符串常量长度太长的问题解决:constant string too long
Java compiler下的Use compiler为Eclipse:
- LongPathException问题解析
一.背景 当windows系统下使用System.IO命名空间下的方法,目录长度超过260个字符时,.net framework会抛出LongPathException.查阅相关资料,发现是 ...
- docker常用命令 状态图
http://blog.csdn.net/permike/article/details/51879578
- Python开发网络爬虫抓取某同城房价信息
前言: 苦逼的我从某某城市换到另一个稍微大点的某某城市,面临的第一个问题就是买房,奋斗10多年,又回到起点,废话就不多说了,看看如何设计程序把某同城上的房价数据抓取过来. 方案:方案思路很简单,先把网 ...
- hive开窗函数over(partition by ......)用法
一.over(partition by ......)主要和聚合函数sum().count().avg()等结合使用,实现分组聚合的功能 示列:根据day_id日期和mac_id机器码进行聚合分组求每 ...