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编译

1878

被折叠的 条评论
为什么被折叠?



