09课02节 u-boot-1.1.6分析之Makefile结构分析

来源:互联网 发布:去水印用什么软件 编辑:程序博客网 时间:2024/05/02 16:56

我们配置时 是make 100ask24x0_config

这条命令到底干了什么?现在分析一下

打开源码目录树顶层的makefile


就相当于执行这条命令    @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

1:MKCONFIG是什么东西?MKCONFIG := $(SRCTREE)/mkconfig      源码树下面有一个mkconfig

2: $(@:_config=) 是什么意思?

还依稀记得makefile手册中的替换引用规则吗?有个例子,反正我是看到过;

obj=$(srcfiles:%.c=%.o) 把只要是.c结尾的替换成.o文件

这里是一样的道理,@是目标,也就是100ask24x0_config ,把_config用空格替换嘛;

所以$(@:_config=) 的结果就是100ask24x0

还不理解的话,就做个例子打印出来自己欣赏下嘛

100ask24x0_config : unconfig

@echo $(@:_config=)       

@代表目标吗?我的记忆是$@才代表目标吧; 做个实验先

all:

@echo $@    输出all

@echo @      输出@

@echo $(@)  输出all    

基本退出$@ 和$(@) 是一样的 都代表目标

所以make 100ask24x0_config  就相当于执行mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0

---

我们再来分析这条命令,我们把mkconfig这个脚本文件打开;



   $#: 代表参数的个数  -gt 大于则为真

也就是判断第一个参数(100ask24x0 )是不是-- -a -n ,我们都不是;所以这句话没有什么用


判断BOARD_NAME有没定义,如果定义了 就BOARD_NAME="S1" 不会执行;如果定义了;BOARD_NAME="S1"就不会执行

貌似跟C语言很相似;我们没有定义; 所以会执行后面的;那$1是什么,是100ask24x0 

所以BOARD_NAME=100ask24x0 


显然不会退出

打印出这句话


在makefile 查找

OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))   这句话的意思是如果定义了BUILD_DIR,OBJTREE=BUILD_DIR,否则=OBJTREE
SRCTREE := $(CURDIR)

OBJTREE没有人定义;所以上面的if不成立

会执行下面的

cd ./include
rm -f asm
ln -s asm-$2 asm    #建立一个链接文件,ln -s asm-arm asm    asm指向asm-arm







  

0 0
原创粉丝点击