u-boot的rules.mk文件分析

更新时间:2023-06-17 01:22:08 阅读: 评论:0

顶层目录下的Rules.mk文件作用是自动生成各级目录下的一些规则:即某些目标和它的依赖。内容是,
>>>>>>>>>>>>>>###
_depend: $(obj).depend
$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(SRCS)
@rm -f $@
@for f in $(SRCS); do /
没关系英语
g=`baname $$f | d -e 's//(.*/)/./w//1.o/'`; /
$(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; /
done
>>>>>>>>>>>>>>###
在大多数子目录中,子目录的Makefile文件中都包含上述规则来自动生成依赖。我们以
u-boot/board/samsungxiaoer/mini2440 为例:
# cd /u-boot/board/Samsung/mini2440
[root@localhost mini2440]# ls
config.mk flash.c lowlevel_init.S Makefile mini2440mozella.c order是什么意思nand_read.c
[root@localhost smdk2410]# vim Makefile
include $(TOPDIR)/config.mk
LIB    = $(obj)lib$(BOARD).a
关灯的英文COBJS    := nand_read.o mini2440.o  flash.o
当然英语
SOBJS    := lowlevel_init.o
SRCS    := $(SOBJS:.o=.S) $(COBJS:.o=.c)
OBJS    := $(addprefix $(obj),$(COBJS))
SOBJS    := $(addprefix $(obj),$(SOBJS))
$(LIB):    $(obj).depend $(OBJS) $(SOBJS)
    $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
clean:
    rm -f $(SOBJS) $(OBJS)
distclean:    clean
    rm -f $(LIB) core *.bak $(obj).depend
>>>>>>>>>>>>>>###
# defines $(obj).depend target
include $(SRCTREE)/rules.mk
sinclude $(obj).depend
>>>>>>>>>>>>>>###---------
$(obj)实际上为空,所以上面任何文件加上这个前缀实际上都没有用,表示在当前目录下面。
$(TOPDIR) == $(SRCTREE) 就是u-boot顶层目录。
现在开始看这个Makefile,可知其终极目标为 LIB即$(obj)lib$(BOARD).a即libmini2440.a
而$(LIB)分别依赖于.depend,$(OBJS),$(SOBJS)
当make按规则去生成$(LIB)时,它首先要去查看.depend文件,初次make的时候,.depend文件
还没有生成,所以make下一步就会查找.depend的生产规则并生成一个.depend文件。乍一看
Makefile好像没有.depend这个次级目标,但是别急,关键在于:
include $(SRCTREE)/rules.mk
这句相当于把rules.mk原方不动的展开,并插入在自己的位置上。
我们再回头看看rules.mk文件,可以发现该文件有.depend目标。
所以.../现状英语mini2440目录下面的Makefile在make的驱动下,会按照rules.mk里面约定的规则生成
.depend文件,并把该文件放入.../mini2440目录。
再次贴上rules.mk:
-
--------
$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(SRCS)
@rm -f $@
@for f in $(SRCS); do /
祛痘小窍门
g=`baname $$f | d -e 's//(.*/)/./w//1.o/'`; /
$(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; /
done
---------
其中.depend的依赖$(src)Makefile,$(TOPDIR)/config.mk的作用对于研究自动生成依赖的
这个问题意义并不重要,只是导入$(HOST_CFLAGS),$(CPPFLAGS)这些变量(我暂时说服自己)。
关键看$(SRCS),在这个地方$(SRCS)代表着当前目录下的源文件,包括:
flash.c lowlevel_init.S mni2440.c nand_read.c
.depend文件的生成规则为一个for循环,也就是找出上述各个源文件的依赖关系并放入
.depend文件。
需要注意的是,这个规则的语法确实太麻烦,我至今没有看清楚,不过不要紧,知道它是把上述
各个源文件的依赖关系取出放入到.depend文件就行。要想弄得更清楚的话,要好好看看d
命令的用法,这里不讨论了。
生成的.depend 文件的内容如下(给出概略形式):
.depend
---------
flash.o: flash.c ...
mini2440.o: mini2440.c ...
nand_read.o: nand_read.c
lowlevel_init.o: lowlevel_init.s  ...
---------
我们再回到.../mini2440下面的Makefile,看终极目标$(LIB)的另外两个依赖:
大学生人际交往
$(OBJS),$(SOBJS) 也就是flash.o ,mini2440.o nand_read.o 和 lowlevel_init.o
似乎我们在.../mini2440下面的Makefile里面看不到上述目标,但是不要急,看看该Makefile的
最后一行:sinclude $(obj).depend
也就是说把flash.o ,mni2440.o nand_read.o和 lowlevel_init.o的依赖关系包含过去了.
agonize通过上述分析,我们知道终极目标$(LIB)的所有依赖关系及次级目标都理清楚了,Make命令最终
可以递归的把$(LIB)生成。
之所以称为"自动生成依赖",我们可以看到:flash.o ,mini2440.o nand_read.o和 lowlevel_init.o的依赖
关系都是make自己来完成的,不需要我们手动改写。即使我们的某个源文件的依赖关系发生了变
化,则.depend文件的时间戳会比某个源文件的时间戳早,则make会重新生成.depend文件!这样
就减轻了繁琐的人工劳动。

本文发布于:2023-06-17 01:22:08,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/971836.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:生成   依赖   文件   规则   自动   关系   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图