我们配置时 是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