$(if $(KBUILD_VERBOSE:1=),@) 语法释疑
来源:互联网 发布:恶搞配音软件 编辑:程序博客网 时间:2024/05/20 12:51
内核版本:2.6.35.13
在 Makefile 的 125 行中有一句:
测试代码-1:
运行输出:
测试代码-2:
运行输出:
在 $(@:_config=) 中,$@ 表示所有的目标文件。也就是说,原先生成的目标文件的文件名末尾是 "_config" 字符串,而 '=' 号后为空,表示去掉 _config 这部分。
比如有 Makefile 文件内容如下:
make 后输出:
从这里可见,原本要输出的目标文件 hello_config 的可执行文件被改名为 hello 。
在 Makefile 的 125 行中有一句:
$(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ KBUILD_SRC=$(CURDIR) \ KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \ $(filter-out _all sub-make,$(MAKECMDGOALS))其中 $(if $(KBUILD_VERBOSE:1=)),@) 的用法看起来有点蹊跷,实际上 $(VAR:x=y) 这种语法相当于 $(patsubst x,y,$(VAR)) 的缩写。这里需要注意一点,x 和 y 前面不能有 ‘%’ 匹配符,这是因为 '%' 已经被默认添加,所以它就如同如下形式:
$(patsubst %x,%y,$(VAR))
这样,$(if $(KBUILD_VERBOSE:1=)),@) 被展开为:
引用$(if $(patsubst %1,%,$(KBUILD_VERBOSE)),@)所以,只要 KBUILD_VERBOSE 为非 1 的任何字符时,整个表达式的结果就是 : @ 。如果 KBUILD_VERBOSE 为 1 时,那么整个表达式结果为空。实际上,表达式结果为 @ 时,就是希望后面的命令能够静默执行。
测试代码-1:
复制代码
KBUILD_VERBOSE := hello1 all: @echo "$(if $(KBUILD_VERBOSE:1=),@)"
运行输出:
引用[beyes@beyes Makefile]$ make
@
测试代码-2:
复制代码
KBUILD_VERBOSE := 1 all: @echo "$(if $(KBUILD_VERBOSE:1=),@)"
运行输出:
引用$ make
#输出为空
此种用法还出现在:
U-Boot 版本:1.1.6
在 U-Boot 的 Makefile 里有这么一个变量:
引用
sbc2410x_config: unconfig @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
在 $(@:_config=) 中,$@ 表示所有的目标文件。也就是说,原先生成的目标文件的文件名末尾是 "_config" 字符串,而 '=' 号后为空,表示去掉 _config 这部分。
比如有 Makefile 文件内容如下:
引用hello_config: hello.o
gcc -o $(@:_config=) $^
hello.o: hello.c
gcc -Wall -c hello.c -o hello.o
make 后输出:
引用t$ ls
hello hello.c hello.h hello.o Makefile
从这里可见,原本要输出的目标文件 hello_config 的可执行文件被改名为 hello 。
- $(if $(KBUILD_VERBOSE:1=),@) 语法释疑
- $(if $(KBUILD_VERBOSE:1=),@) 语法释疑
- 释疑の语法LOCAL
- 释疑の语法Unpack&pack
- if 语法
- 释疑の语法 ON CHANGE OF
- shell if语法
- If else 语法
- python学习:if 语法
- shell if 语法参数
- python if语句语法
- shell中的if语法
- shell if语法
- bash中的if语法
- shell编程-IF语法
- Linux if 语法
- linux的if语法
- linux shell if 语法
- 详解 Qt 中各种丰富容器类
- MySQL command to show list of databases on server
- Date的处理
- python调用短信猫控件,发短信
- 网站优化案例策划分享
- $(if $(KBUILD_VERBOSE:1=),@) 语法释疑
- 关于C语言中类似"a<b<c"条件的值
- ubuntu 下不能识别 eth0 解决方法
- flex 如何设置蒙版(遮罩)
- 五步搞定sql server2005数据库日志清除
- JSP中动态INCLUDE与静态INCLUDE的区别
- 据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
- 关于页面字体
- linux下安装oracle 10 步骤