linux编译过程的命令打印

linux编译过程的命令打印

linux编译过程对于命令的打印分为三种情况

  • 不输出打印

  • 输出简要打印

  • 输出完整命令打印


样例代码如下:

echo-cmd = $(if $($(quiet)cmd_$(1)), echo '$($(quiet)cmd_$(1))';)

quiet_cmd_cc_o_c = CC       $@
      cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<

define rule_cc_o_c
	@$(call echo-cmd,cc_o_c) $(cmd_cc_o_c);
endef

%.o: %.c
	$(rule_cc_o_c)

echo-cmd的赋值决定了打印的格式,$(call echo-cmd,cc_o_c)即调用echo-cmd的赋值语句,展开为:

if $($(quiet)cmd_cc_o_c, echo '$($(quiet)cmd_cc_o_c';

  • 不输出打印

此时quiet = scilent_,由于scilent_cmd_cc_o_c没有被定义,$(call echo-cmd,cc_o_c)的if条件不成立,将什么都不执行。

  • 输出简要打印

此时quiet = quiet_$(call echo-cmd,cc_o_c)将执行echo ‘$(quiet_cmd_cc_o_c)’

  • 输出完整打印

此时quiet =$(call echo-cmd,cc_o_c)将执行echo ‘$(cmd_cc_o_c)’

quiet的定义

  • 当使用make V=1编译时,quiet =

  • 当make不带相关参数或者make V=0编译时,quiet = quiet_

  • 当使用make -s编译时,quiet = scilent_

备注:make -s是make自带的功能,用于不会输出命令打印。为了兼容这一功能,如果出现-s参数,需要将quiet赋值为scilent_


关于quiet定义的实现代码如下:

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

ifeq ($(KBUILD_VERBOSE),1)
  quiet =
else
  quiet=quiet_
endif
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

小结

  • 不输出打印,使用make -s编译

  • 输出简要打印,make不带相关参数或者make V=0

  • 输出完整命令打印,使用make V=1编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值