20.U-boot顶层Makefile简要分析

二、顶层Makefile前面部分分析

1.递归调用make(20-29)

​ 在源码内有许许多多的目录,顶层Makefile也要调用子目录(subdir)中的makefile。

$(MAKE) -C subdir

​ export :用于给子makefile传入变量

​ unexport :用于不给子makefile导入变量

​ SHELL / MAKEFLAGS :无论用不用export , 都会将变量直接传给子makefile的。

MAKEFLAGS += -rR --include-dir=$(CURDIR)

# Avoid funny character set dependencies
unexport LC_ALL
LC_COLLATE=C
LC_NUMERIC=C
export LC_COLLATE LC_NUMERIC

# Avoid interference with shell env settings
unexport GREP_OPTIONS
2.命令行编译V=1的用处(73-86)

​ 看代码不难发先,它会比较V在命令行中输入的值,如果为非0,就会给KBUILD_VERBOSE变量赋值。为1的时候就会给quiet与Q附一个空值。也就是说在给每一个编译命令都会调用quiet与Q之来判断是否要打印出详细的命令代码。其中Q=@。在makefile中,如果在命令前面使用@,就不会打印在终端了。其中quiet_cmd_socboot , 与cmd_socboot命令等效,quiet=quiet_的话,输出较短版本的命令。

ifeq ("$(origin V)", "command line")
  KBUILD_VERBOSE = $(V)
endif
ifndef KBUILD_VERBOSE
  KBUILD_VERBOSE = 0
endif

ifeq ($(KBUILD_VERBOSE),1)
  quiet =
  Q =
else
  quiet=quiet_
  Q = @
endif

$(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \
	-f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
quiet_cmd_socboot = SOCBOOT $@
cmd_socboot = cat	spl/u-boot-spl.sfp spl/u-boot-spl.sfp	\
			spl/u-boot-spl.sfp spl/u-boot-spl.sfp	\
			u-boot.img > $@ || rm -f $@
3.静默编译(91-101)

​ 使用make -s可以执行静默编译,编译全程不会打印命令信息,很少用。quiet = silent_。

ifneq ($(filter 4.%,$(MAKE_VERSION)),)	# make-4
ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
  quiet=silent_
endif
else					# make-3.8x
ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
  quiet=silent_
endif
endif

export quiet Q KBUILD_VERBOSE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值