ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
//如果定义了O变量,且定义O变量的方式是以命令行方式定义的,如: make O=tmp/builder,就将这个O变量值赋给BUILD_DIR变量
//如果O变量没有被定义,则上面语句不被执行。
ifneq ($(BUILD_DIR),) //如果BUILD_DIR不为空
saved-output := $(BUILD_DIR) //就将BUILD_DIR的变量值赋给saved-output
# Attempt to create a output directory.
$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}) //这里的shell是个函数,如果BUILD_DIR是一个目录名称,就把该目录创建出来
# Verify if it was successful.
BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
$(if $(BUILD_DIR)