ifeq (,$(findstring s,$(MAKEFLAGS)))
XECHO = echo
else
XECHO = :
endif
在uboot的主Makefile中第50-54行,这段代码的功能是实现静默编译。什么叫静默编译呢?我们在配置完uboot后就可以通过make指令来编译整个uboot了,但是有时候我们在编译的过程中会输出好多信息,如果我们不想看到这些信息就可以通过编译时传参来让编译过程输出少一点信息。具体的命令时make -s。-s会做为MAKEFLAGS传给Makefile,在代码的作用下XECHO变量就会变成空。
以上这段代码的意思是,在传参中查找s,查找结果和空作比较,如果相等则XECHO = echo(不是静默编译),否则XECHO赋值为空(不是静默编译)。从而实现了静默编译。
ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
这句话表示如果在编译的命令里面加入参数O(如 make O=/tmp).,就把O后面所指定的值赋给变量BUILD_DIR,(BUILD_DIR表示uboot的编译路径)
ifneq ($(BUILD_DIR),)
saved-output := $(BUILD_DIR)
如果环境变量BUILD_DIR不等于空,则输出的目录等于环境变量指定的目录。
# Attempt to create a output directory.
$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
执行shell命令:[ -d xxx]判断一个文件或文件夹是否存在,如果存在就不再判断后面的 ||操作,如果不存在则执行:mkdir -p xxx来创建这个文件。加入-p选型目的是可以创建多级的目录比如:/usr/local/arm
# Verify if it was successful.
BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
$(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
endif # ifneq ($(BUILD_DIR),)
意思是先进入到BUILD_DIR目录,然后调用PWD命令显示当前路径名,并把当前路径名赋给BUILD_DIR变量,然后判断环境变量BUILD_DIR是否为空为空则打印指定的路径不存在。
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
TOPDIR := $(SRCTREE)
LNDIR := $(OBJTREE)
export TOPDIR SRCTREE OBJTREE
查看 $(BUILD_DIR),是否定义过,如果没定义则OBJTREE赋值$(CURDIR)即当前目录。
入后分别赋值OBJTREE,SRCTREE,TOPDIR ,LNDIR 。
最后把这些环境变量导出。
阅读(1256) | 评论(0) | 转发(0) |