#
# Makefile in uboot/lib_arm
#
include $(TOPDIR)/config.mk
# 包含进顶层目录的config.mk文件
LIB = $(obj)lib$(ARCH).a
# 表明库文件路径,$(obj)在顶层目录里面的config.mk里定义,
# $(ARCH)在顶层目录里面的Makefile里面定义,一般为arm,ppc,i386等
SOBJS = _ashldi3.o _ashrdi3.o _divsi3.o _modsi3.o _udivsi3.o _umodsi3.o
# 表明汇编生成的目标文件
COBJS = armlinux.o board.o \
cache.o div0.o
# 表明C代码生成的目标文件
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
# 字符串替换,把字符串$SOBJS与字符串$COBJS中所有以.o结尾的字符串替换成分别替换成以.S .c结尾
# 其格式为$(var:a=b)或者是${var:a=b}
OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
# $(addprefix
;,;)
#
# 名称:加前缀函数——addprefix。
# 功能:把前缀;加到;中的每个单词后面。
# 返回:返回加过前缀的文件名序列。
# 示例:$(addprefix src/,foo bar)返回值是“src/foo src/bar”。
$(LIB): $(obj).depend $(OBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)
# 生成目标文件为$(LIB),依赖的文件为$(obj)下的.depend与$(OBJS)文件
# 生成该目标文件所使用的命令为$(AR) $(ARFLAGS) $@ $(OBJS)
# AR = $(CROSS_COMPILE)ar定义在config.mk文件里面
# ifneq (,$(findstring s,$(MAKEFLAGS)))
# ARFLAGS = cr
# else
# ARFLAGS = crv
# endif
# "$@"表示所有的目标的挨个值,"$<"表示了所有依赖目标的挨个值
# 这些奇怪的变量我们叫"自动化变量",
#########################################################################
# defines $(obj).depend target
include $(SRCTREE)/rules.mk
# 包含进源码目录树的rules.mk
sinclude $(obj).depend
# 包含进.depend文件
# 三、引用其它的Makefile
#
# 在Makefile使用include关键字可以把别的Makefile包含进来,这很像C语言的#include,被包含的文件会原模原样的放在当前文件的包含位置。include的语法# 是:
#
# include ;
#
# filename可以是当前操作系统Shell的文件模式(可以保含路径和通配符)
#
# 在include前面可以有一些空字符,但是绝不能是[Tab]键开始。include和;可以用一个或多个空格隔开。举个例子,你有这样几个Makefile:a.mk、# b.mk、c.mk,还有一个文件叫foo.make,以及一个变量$(bar),其包含了 e.mk和f.mk,那么,下面的语句:
#
# include foo.make *.mk $(bar)
#
# 等价于:
# include foo.make a.mk b.mk c.mk e.mk f.mk
# make命令开始时,会找寻include所指出的其它Makefile,并把其内容安置在当前的位置。就好像C/C++的#include指令一样。如果文件都没有指定绝对路径或是
# 相对路径的话,make会在当前目录下首先寻找,如果当前目录下没有找到,那么,make还会在下面的几个目录下找:
# 1、如果make执行时,有“-I”或“--include-dir”参数,那么make就会在这个参数所指定的目录下去寻找。
# 2、如果目录/include(一般是:/usr/local/bin或/usr/include)存在的话,make也会去找。
# 如果有文件没有找到的话,make会生成一条警告信息,但不会马上出现致命错误。它会继续载入其它的文件,一旦完成makefile的读取, make会再重试这些没有找到,# 或是不能读取的文件,如果还是不行,make才会出现一条致命信息。如果你想让make不理那些无法读取的文件,而继续执行,你可以在include前加一个减号“-”。 # 如:
# -include ;
# 其表示,无论include过程中出现什么错误,都不要报错继续执行。和其它版本make兼容的相关命令是sinclude,其作用和这一个是一样的。
#########################################################################
阅读(950) | 评论(0) | 转发(0) |