u-Boot 顶层Makefile解析(二)
u-Boot -Makefile(二) 声明 : 以下解析大部分来自网络大神之手 所以可以放心阅读 Good luck 参考地址不可考 有事请留言########################################################################### U-boot build supports producing a object files to the separate external# directory. Two use cases are supported:# 可以将 U-Boot的创建指向其他外部路径(可以理解为自定义的directory) 来存放最终生成的目标文件。支持以下两种方法:## 1) Add O= to the make command line# 'make O=/tmp/build all'# 第一种用法:通过在终端执行命令make O=/dir (/dir即为我们指定的生成的目标文件的存放目录)# 然后执行 "make O=/dir"# 2) Set environement variable BUILD_DIR to point to the desired location# 'export BUILD_DIR=/tmp/build'# 'make'# 第二种用法:通过设置环境变量来指定目标文件存放目录# 'export BUILD_DIR=/tmp/build'# then excute : 'make'# The second approach can also be used with a MAKEALL script# 第二中方式还可以写成一个MAKEALL脚本 然后执行 ./MAKEALL# 'export BUILD_DIR=/tmp/build'# './MAKEALL'## Command line 'O=' setting overrides BUILD_DIR environent variable.# 命令行'O='的设置会覆盖BUILD_DIR环境变量的设置# When none of the above methods is used the local build is performed and# the object files are placed in the source directory.# 当以上两种方式都未被采用时,默认创建路径是当前u-boot所在的目录的也就是存放在u-boot自己的顶层目录下# 理解了上面一段英文,这里就不难理解了 都是对应着的ifdef O #如果定义了变量'O'ifeq ("$(origin O)", "command line")#如果变量上面那个变量'O'在command line(命令行)里定义过BUILD_DIR := $(O)#就把变量'O'的值赋给BUILD_DIR这个环境变量endif#endifendif#endififneq ($(BUILD_DIR),)#如果BUILD_DIR被定义过saved-output := $(BUILD_DIR)#就把它的值赋给saved-output # Attempt to create a output directory. #尝试创建一个输出路径BUILD_DIR$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})#创建这个路径的shell命令# Verify if it was successful.#检测是否创建成功BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)$(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))#如果BUILD_DIR非空则什么都不做 endif #如果为空则用error输出错误信息# ifneq ($(BUILD_DIR),) #被注释了?看上去有点怪怪的OBJTREE:= $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))#如果BUILD_DIR为非空则将BUILD_DIR路径赋给OBJTREE否则将当前路径CURDIR赋给OBJTREESRCTREE:= $(CURDIR)#把当前源码所在目录 $(CURDIR) 赋给SRCTREETOPDIR:= $(SRCTREE)#你懂的LNDIR:= $(OBJTREE)#就是最终设置好的生成目标文件的存放路径exportTOPDIR SRCTREE OBJTREE#导出这三个路径变量MKCONFIG:= $(SRCTREE)/mkconfig#让MKCONFIG指向U-BOOT源码存放的顶层目录下的mkconfig配置文件export MKCONFIG#并且导出MKCONFIGifneq ($(OBJTREE),$(SRCTREE))#当目标存放目录不是U-BOOT顶层目录(源码目录)时REMOTE_BUILD := 1#REMOTE_BUILD=1 只是flag?export REMOTE_BUILD#导出REMOTE_BUILDendif#endif# $(obj) and (src) are defined in config.mk but here in main Makefile# we also need them before config.mk is included which is the case for# some targets like unconfig, clean, clobber, distclean, etc.ifneq ($(OBJTREE),$(SRCTREE))#当目标存放目录不是U-BOOT顶层目录(源码目录)时obj := $(OBJTREE)/#定义变量obj让其等于目标存放目录 多了一个/ 他们是目录src := $(SRCTREE)/#定义变量src让其等于uboot顶层目录else#elseobj :=#obj = 空src :=#src = 空endif#endifexport obj src#export them