1. uboot版本号设置
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h
设置uboot的版本号,version_autogenerated.h在编译后自动生成,里面的内容为 #define U_BOOT_VERSION "U-Boot 1.3.4",以宏定义的方式定义uboot的版本号。
2. 导出编译主机的CPU架构和操作系统
HOSTARCH := $(shell uname -m | \
sed -e s/i.86/i386/ \
-e s/sun4u/sparc64/ \
-e s/arm.*/arm/ \
-e s/sa110/arm/ \
-e s/powerpc/ppc/ \
-e s/ppc64/ppc/ \
-e s/macppc/ppc/)
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
sed -e 's/\(cygwin\).*/cygwin/')
export HOSTARCH HOSTOS
(1) 在shell中符号|叫做管道,把管道前的运算式的输出作为后面一个运算式的输入,sed可以实现字符替换;
(2)tr '[:upper:]' '[:lower:]'是将大写字符替换为小写字符;
(3)export HOSTARCH HOSTOS是导出环境变量,分别是主机系统架构和主机操作系统,后面会用到。
3.静默编译
# Allow for silent builds
ifeq (,$(findstring s,$(MAKEFLAGS)))
XECHO = echo
else
XECHO = :
endif
编译时使用 make -s, 使用 ifeq (,$(findstring s,$(MAKEFLAGS))) 来判断是否有属性s,如果有,则XECHO为空,不打印编译信息。
4. 实现两种编译方式,原地编译和设置输出目录编译
ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
ifneq ($(BUILD_DIR),)
saved-output := $(BUILD_DIR)
# Attempt to create a output directory.
$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
# 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),)
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
TOPDIR := $(SRCTREE)
LNDIR := $(OBJTREE)
export TOPDIR SRCTREE OBJTREE
配置输出目录,可以防止污染源代码。
OBJTR