唐门问心 2013-10-08
u-Boot -Makefile(一) 声明 : 以下解析大部分来自网络大神之手 所以可以放心阅读 Good luck
VERSION = 1
PATCHLEVEL = 1
SUBLEVEL = 6
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
#版本号定义
VERSION_FILE = $(obj)include/version_autogenerated.h #不是很理解这句话的意思
# 举例理解$(obj) obj := a.o b.o $(obj)指的是obj变量的值 即为a.o b.o
# makefile中的$(xxx)跟shell中的是不一样的
HOSTARCH := $(shell uname -m | \
sed -e s/i.86/i386/ \
-e s/sun4u/sparc64/ \
-e s/arm.*/arm/ \
-e s/sa110/arm/ \
-e s/powerpc/ppc/ \
-e s/macppc/ppc/)
# uname 命令将正在使用的操作系统名写到标准输出中
# -m 显示系统运行的硬件机器ID号
# '| ' 为linux中的管道处理符 pipe 而 '\' 自然就是换行符咯
# sed -e 后面跟着一串(shell?)命令脚本 表示将i.86替换成i386 这样执行一套程序下来就知道硬件的体系结构了 如何知道的?
# 我猜应该会有某个变量用来标记 是哪种硬件体系的吧 只要对应的体系结构名被修改后就标记它 得以知道是哪种结构?
# i386
# sparc64
# arm -ARM
# ppc -Power PC
##下面这句话的意思是定义变量HOSTOS,HOSTOS里面存放的是主机安装的,并且当前正在运行的操作系统
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
sed -e 's/\(cygwin\).*/cygwin/')
#sed -e 's/\(cygwin\).*/cygwin/')
# 这一句的意思是检测出主机安装的,并且当前正在运行的操作系统名,并把这个系统名中的大写字母转换为小写字母
# 然后在通过sed流编辑器匹配所有的,这个系统名中出现的"\(cygwin\).*"模式,然后再用"cygwin"模式替换。(用来处理"cygwin"环境下编译的环境变量)
## 可以把shell脚本写到makefile里面,这是make中的shell function,相当于shell中的命令替换!
# uname -s 得到内核系统名称即Linux
# tr '[:upper:]' '[:lower:]'把大写变成小写然后输出(也就是将Linux--->linux Linux是通过管道得来的)(tr为shell command)
export HOSTARCH HOSTOS #导出变量HOSTARCH 和变量HOSTOS
# Deal with colliding definitions from tcsh etc.处理来自tcsh相互冲突的定义等等
VENDOR=
#VENDOR 是卖家、卖方的意思 这边可以写开发商名字吧
相关阅读: