以下所有内容均基于 "u-boot-2012.04.01"。
 
在u-boot中的子目录makefile中,有大量的类似于下面的语句:

Makefile (drivers\gpio):
COBJS-$(CONFIG_AT91_GPIO) += at91_gpio.o
COBJS-$(CONFIG_KIRKWOOD_GPIO) += kw_gpio.o
COBJS-$(CONFIG_MARVELL_GPIO) += mvgpio.o
COBJS-$(CONFIG_MARVELL_MFP) += mvmfp.o
COBJS-$(CONFIG_MXC_GPIO) += mxc_gpio.o
COBJS-$(CONFIG_MXS_GPIO) += mxs_gpio.o
COBJS-$(CONFIG_PCA953X) += pca953x.o
COBJS-$(CONFIG_PCA9698) += pca9698.o
COBJS-$(CONFIG_S5P) += s5p_gpio.o
COBJS-$(CONFIG_SANDBOX_GPIO) += sandbox.o
COBJS-$(CONFIG_TEGRA2_GPIO) += tegra2_gpio.o
COBJS-$(CONFIG_DA8XX_GPIO) += da8xx_gpio.o
COBJS-$(CONFIG_ALTERA_PIO) += altera_pio.o

COBJS-$(CONFIG_MPC83XX_GPIO) += mpc83xx_gpio.o

以" COBJS-$(CONFIG_MXS_GPIO) += mxs_gpio.o"为例,这里"$( CONFIG_MXS_GPIO) "到底表示什么?

在头文件M28evk.h (include\configs)中:
#define CONFIG_MXS_GPIO /* GPIO control */

在顶层makefile中:

all:                                                                           /* sinclude类似于-include,这里不做解释 */
sinclude $(obj)include/autoconf.mk.dep
sinclude $(obj)include/autoconf.mk
可以看出,依赖文件包括" autoconf.mk.dep"和" autoconf.mk",但在源码树中根本就找不到这两个文件,是怎么回事?
在顶层makefile中:

#
# 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 $@  
原来, 文件" autoconf.mk"是基于" include/config.h "和 " include/common.h "自动生成的,这里会用到一个脚本" tools/scripts/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/="\(.*\)"$/=\1/;
# 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]*\)"/=\1/;
# ... and from hex numbers
s/="\(0[Xx][0-9a-fA-F][0-9a-fA-F]*\)"/=\1/;
# Change '1' and empty values to "y" (not perfect, but
# supports conditional compilation in the makefiles
s/=$/=y/;
s/=1$/=y/;
# print the line
p
}
这个脚本的功能大概就是:处理头文件中以"CONFIG_"开始的宏定义,将定义为"空"或为"1"的宏转换为"y",并生成一个可以被makefile识别的"autoconf.mk"文件,在这个文件里就会出现"-y",如下:

CONFIG_CMD_FAT=y

CONFIG_USB_OHCI=y
CONFIG_BOOTM_NETBSD=y
CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_SYS_CLK_FREQ=12000000
CONFIG_CMD_ITEST=y
。。。。

Makefile 条件编译-y相关推荐

  1. 陷阱:C++模块之间的”直接依赖“和”间接依赖“与Makefile的撰写

    参考:http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ 参考:http://stackoverflow ...

  2. 实战Makefile

    1. 没有makefile的日子 1.1 手动编译 1.2 文件编译依赖树 2. 快速体验makefile 3. makefile 变量 4.  makefile条件编译 5. makefile函数 ...

  3. 跨平台SSE、AVX指令测试

    本文面对对SSE等SIMD指令集有一定基础的读者,以单精度浮点数组求和为例演示了如何跨平台使用SSE.AVX指令集.因使用了stdint.zintrin.ccpuid这三个模块,可以完全避免手工编写汇 ...

  4. [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和...

    作者:zyl910. 本文面对对SSE等SIMD指令集有一定基础的读者,以32位整数数组求和为例演示了如何跨平台使用MMX.SSE2指令集.支持vc.gcc编译器,在Windows.Linux.Mac ...

  5. [C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)...

    作者:zyl910. 本文面对对SSE等SIMD指令集有一定基础的读者,以单精度浮点数组求和为例演示了如何跨平台使用SSE.AVX指令集.因使用了stdint.zintrin.ccpuid这三个模块, ...

  6. 用Microwindows(Nano-X)编写“hello world”

    原文地址:http://blog.csdn.net/wooin/archive/2008/05/14/2446721.aspx 用Microwindows(Nano-X)编写"hello w ...

  7. IE 浏览器各个版本 JavaScript 支持情况一览表

    不同版本的 Internet Explorer 浏览器支持不同的 JavaScript 元素集.标准模式(有 <!doctype> 指令时 Internet Explorer 所有当前版本 ...

  8. linux 串口命令

    Linux下有一个专门的stty命令可以查看或设置终端的参数 #在开发板的终端执行如下命令 #它会输出当前终端的参数     stty     #查看ttymxc0设备参数     stty -F / ...

  9. 在Jetson Nano上安装RTL8821cu驱动

    在Jetson Nano上安装RTL8821cu驱动 下载该芯片的驱动 编译 网卡模式转换 Jetson Nano没有自带无线网卡,我用的是USB无线网卡,而且还是TP-Link的TL-WDN5200 ...

最新文章

  1. 数据结构--KMP算法总结
  2. java调用可执行程序 开销_java – 进行JNI调用的定量开销是多少?
  3. 数据中心液体冷却技术的五个主要关注点
  4. 终于找全啦!一二线城市知名互联网公司名单!对着找就对了
  5. C#嵌套任务和子任务
  6. lob移表空间 oracle_Oracle数据库(1)Oracle体系结构概述(一)
  7. 对象的释放Dispose和Close对比
  8. 利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...
  9. LINQPad工具-linq、sql、IL优化和转换
  10. validform 一行代码完成所有验证
  11. 记录一下安装eclipse中的windows-builder组件时的一些问题
  12. myEclipse10破解及过期处理
  13. 工赋开发者社区 | 抛弃 Google,Debian 改将 DuckDuckGo 作为默认搜索引擎
  14. CSS 深入理解absolute
  15. iOS定位经纬度问题
  16. Ubuntu 18.4 qt5.12 安装搜狗拼音输入法
  17. 行业首选|墨菲安全实力入选《开发安全产品及服务购买决策参考》
  18. Golang postgres.go:45:3: unknown field ‘WithReturning‘ in struct literal of type....
  19. 海康智能分析服务器设置,【胖猴小玩闹】智能门锁与网关: 海康萤石智能门锁的网关分析(三)...
  20. 写一段有趣的科普文来介绍鲫鱼

热门文章

  1. 自定义控件学习笔记(五)Canvas 对绘制的辅助——范围裁切和几何变换
  2. 描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。
  3. Asp.net 无法启动IIS Express 解决办法
  4. 再见,微软 IE 浏览器!
  5. JS 的省市区三级联动
  6. 勒索病毒敲响网络安全警钟
  7. 打开word、excel弹出控件安装弹窗
  8. pythonds18b20_树莓派 Zero W+温度传感器DS18B20
  9. linux用通配符取数据文件,Linux 通配符
  10. 【微信小程序】小程序显示弹窗时禁止下层的内容滚动|遮罩层滚动穿透