|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
分析U-Boot或者是分析Linux内核这些庞大的代码量时,我们应该首先去阅读它的顶层Makefile文件,它会告诉你,这些如何编译这么一系列的文件。这就如同你去到一个陌生的大城市,首先你要买一张地图,才能更好的去了解这座城市。进入顶层的Makefile里面有那么二句( j# }0 y3 E6 r
0 H% v1 ~6 W. t. C1884 EmbedSky_config : unconfig
+ Q$ |1 Q. ]6 I: J1885 @$(MKCONFIG) $(@:_config=) ARM arm920t EmbedSky NULL s3c24x0; c3 i0 H; C6 t3 q- E$ e
! F& E6 e( U4 I* a) N+ X5 \
这是Makefile最基础语法之一,在语法上来说,EmbedSky_config是一个目标,unconfig是一个依赖,
, g, m5 L2 b/ D0 H, C* H/ @8 L' }/ j0 L! v
@$(MKCONFIG) $(@:_config=) arm arm920t EmbedSky NULL s3c24x0就是一个命令。
7 V8 N7 `* A: [$ n7 F( q- D# ^
! Z1 M6 D3 V$ x- X$ F- `1 G, n" q
& s! l% B- d6 X0 K5 P" s% B5 \
, \$ a9 J/ |6 q! g* lunconfig:" r2 \ O' A; v) ?2 |9 P
( K: j0 k) d* i+ n$ t @rm -f $(obj)include/config.h $(obj)include/config.mk \ $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp
$ T1 T/ |! q7 G+ H6 o
( ]3 n) `* M/ \8 y@$(MKCONFIG) $(@:_config=) arm arm920t EmbedSky NULL s3c24x0
" V/ O5 @9 w) I1 c0 Q& I, Z3 y' |* ]% w. F4 C9 X
$(@:_config=) 是什么意思呢?& i/ k0 I7 ]- n
% {: z, Z5 P1 t5 b9 E这语法是利用了Makefile的替换功能,如:obj=$(srcfiles:%.c=%.o)就是将源文件里面的.c文件替换成.o文件,相对应的,$(@:_config=)就相当于$(EmbedSky_config:_config=) 将EmbedSky_config中的_config=空,也就是去掉_config,得到EmbedSky2 H2 a4 A: P- L7 {1 q6 ~1 N' s
9 [4 ]2 V8 q7 J4 }; P/ ^MKCONFIG其实就是根目录的脚本文件,这句的目的就是给脚本传递六个参数 所以上面的其实就是
r( B# y. U/ S! i {$ K
/ u, C* `, a7 C./mkconfig EmbedSky arm arm920t EmbedSky NULL s3c24x01 U2 k7 R" i0 J+ P/ p( D! n$ Z
4 S# \9 _8 T9 U" l# o3 K; M# y
$0 $1 $2 $3 $4 $5 $6
+ _ B$ u. I2 E! L& x v3 ~7 p6 W! a7 c9 S# I8 w" X% z9 r
接下来就分析顶层目录下的mkconfig这个脚本文件# X9 g+ ~7 X& k3 Q+ a% \
" F2 A" M% ^' d+ d1 I
$ K( `/ q) ^6 s8 x" `$ k, u7 v8 E0 s+ f9 n/ m8 }
|
|