11.2.4 静默输出
设置 V=0 或者在命令行中不定义 V 的话,编译 uboot 的时候终端中显示的短命令,但是还是会有命令输出,有时候我们在编译 uboot 的时候不需要输出命令,这个时候就可以使用 uboot 的静默输出功能。编译的时候使用“make -s”即可实现静默输出。
顶层 Makefile中相应的代码如下:
105 # If the user is running make -s (silent mode), suppress echoing of
106 # commands
107
108 ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
109 ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
110 quiet=silent_
111 endif
112 else # make-3.8x
113 ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
114 quiet=silent_
115 endif
116 endif
117
118 export quiet Q KBUILD_VERBOSE
第 108 行 判 断 当 前 正 在 使 用 的 编 译 器 版 本 号 是 否 为 4.x , 判 断 $(filter4.%,$(MAKE_VERSION))和“ ”(空)是否相等
如果不相等的话就成立,执行里面的语句。也就是说$(filter 4.%,$(MAKE_VERSION))不为空的话条件就成立。
这里用到了 Makefile 中的 filter函数,这是个过滤函数,函数格式如下:
$(filter <pattern...>,<text>)
filter 函数表示以 pattern 模式过滤 text 字符串中的单词,仅保留符合模式 pattern 的单词,可以有多个模式。函数返回值就是符合 pattern 的字符串。
因此$(filter 4.%,$(MAKE_VERSION))的 含 义 就 是 在 字 符 串 “ MAKE_VERSION ” 中 找 出 符 合 “ 4.% ” 的 字 符 (% 为 通 配 符 ) ,
MAKE_VERSION 是 make 工具的版本号。
ubuntu18.04 里面默认自带的 make 工具版本号为 4.1。大家可以输入“make -v”查看
因此$(filter 4.%,$(MAKE_VERSION))不为空,条件成立,执行109~111 行的语句。
第 109 行也是一个判断语句,如果$(filter %s ,$(firstword x$(MAKEFLAGS)))不为空的话条件成立,变量 quiet 等于“silent_”。
这里也用到了函数 filter,在$(firstword x$(MAKEFLAGS)))中过滤出符合“%s”的单词。
这里用到了函数 firstword,函数 firstword 是获取首单词。
$(firstword <text>)
firstword 函数用于取出 text 字符串中的第一个单词,函数的返回值就是获取到的单词。当
使用“make -s”编译的时候,“-s”会作为 MAKEFLAGS 变量的一部分传递给 Makefile。
第 118 行使用 export 导出变量 quiet、Q 和 KBUILD_VERBOSE。