uboot Makefile 分析

##uboot Makefile 分析

###makefile基础

简单示例:
#sample
main.o:main.c defs.h
	cc -c main.c
clean:
	rm *.* 	

####包含其他makefile

include FILENAMES
include指示符用于make暂停读取当前Makefile,转而去读取inlcude制定的文件,完成后再继续当前的makefile读取

[Tab]字符开始make程序将此行作为一个命令行来处理
变量 MAKEFILES
变量 MAKEFILE_LIST
makefile普通规则


makefile模式规则

%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
此规则描述了一个.o文件如何由对应的.c文件创建。规则的命令行中使用了自动化变量
“ $<”和“ $@”,其中自动化变量“ $<”代表规则的依赖,“ $@”代表规则的目标。
此规则在执行时,命令行中的自动化变量将根据实际的目标和依赖文件取对应值。

依赖类型:常规依赖与order-only依赖

LIBS = libtest.a
foo : foo.c | $(LIBS)
$(CC) $(CFLAGS) $< -o $@ $(LIBS)
规则中依赖文件$(LIBS)只有在目标文件不存在的情况下,才会参与规则的执行。当目
标文件存在时此依赖不会参与规则的执行过程

变量
变量是一个名字(像是 C 语言中的宏),代表一个文本字符串(变
量的值)

objects = program.o foo.o utils.o
program : $(objects)
cc -o program $(objects)
$(objects) : defs.h
变量的替换引用,格式为“ $(VAR:A=B)”(或者“ ${VAR:A=B}”),
foo := a.o b.o c.o
bar := $(foo:.o=.c)
变量“ bar”的值就为“ a.c b.c c.c”。
:   以冒号开头表示注释
@   以@开头表示命令执行的时候不显示命令本身

自动化变量
$@  表示规则的目标文件名
$<  规则的第一个依赖文件名
$^  规则的所有依赖文件列表
$?  所有比目标文件更新的依赖文件列表,空格分割
$%  当规则的目标文件是一个静态库文件时,代表静态库的一个成员名

$(@D) 表示目标文件的目录部分(不包括斜杠)
$(@F) 目标文件的完整文件名中除目录以外的部分(实际文件名)
$(*D) $(*F) 分别代表目标“茎”中的目录部分和文件名部分
$(<D) $(<F) 分别表示规则中第一个依赖文件的目录部分和文件名部分
$(^D) $(^F) 分别表示所有依赖文件的目录部分和文件部分(不存在同一文件)
$(+D) $(+F) 分别表示所有依赖文件的目录部分和文件部分(可存在重复文件)。
$(?D) $(?F) 分别表示被更新的依赖文件的目录部分和文件名部分

Makefile 中:= ?= += =的区别

新建一个Makefile,内容为:
ifdef DEFINE_VRE
    VRE =Hello World!else
endif

ifeq ($(OPT),define)
    VRE ?=Hello World! First!”
endif

ifeq ($(OPT),add)
    VRE +=Kelly!”
endif

ifeq ($(OPT),recover)
    VRE :=Hello World! Again!”
endif

all:
    @echo $(VRE)

敲入以下make命令:
make DEFINE_VRE=true OPT=define 输出:Hello World!
make DEFINE_VRE=true OPT=add 输出:Hello World! Kelly!
make DEFINE_VRE=true OPT=recover  输出:Hello World! Again!
make DEFINE_VRE= OPT=define 输出:Hello World! First!
make DEFINE_VRE= OPT=add 输出:Kelly!
make DEFINE_VRE= OPT=recover 输出:Hello World! Again!

从上面的结果中我们可以清楚的看到他们的区别了
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值

###增加TQ2440板子到uboot

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值