Makefile中wildcard函数的应用理解
文章目录
前言
1 "*"通配符使用场景
2 "*"通配符实例
总结
前言
如果我们想定义一系列比较类似的文件,我们很自然地就想起使用通配符。make 支持三种通配符:"*","?" 和 "[...]"。这和 Unix 的 B-Shell 是相同的。本篇主要讲述 "*" 通配符在变量中使用失效时,使用 wildcard 函数使能 "*" 通配符的通配功能。
1 "*"通配符使用场景
(1) 在命令中使用"*";
clean:rm -f *.o
这是操作系统 Shell 所支持的通配符,删除当前目录下的所有以 .o 结尾的文件。
这是在命令中的有效通配符,通配所有 .o 文件的集合。
(2) 在规则中使用"*";
print: *.clpr -p $?touch print
上面这个例子说明通配符 "*" 也可以在我们的规则中使用,目标 print 依赖于所有的 .c 文件。
(3) 在变量中使用"*";
objects = *.o
上面这个例子,表示了通配符 "*" 同样可以在变量中使用。
但是 *.o 在变量中不会展开,objects 的值就是 *.o。Makefile 中的变量其实就是 C/C++ 中的宏。如果希望通配符 "*" 在变量中展开,也就是让 objects 的值是所有 .o 的文件名的集合,那么需要 wildcard 函数的配合。
objects := $(wildcard *.o)
这样,objects 的值就是所有 .o 的文件名的集合。
2 "*"通配符实例
这里我创建了 source_dir 目录和三个子目录: gpio、irq、usart。三个子目录中都有对应的 .c 文件。
$(foreach source, $(SOURCE_DIR), $(wildcard $(source)/*.c))
上面的例子中,$(SOURCE_DIR) 中的单词会被挨个取出,并存到变量 source 中,(wildcard $(source)/*.c) 每次根据 $(source)/*.c 计算出一个值(因为使用了 wildcard,所以匹配单词目录下 .c 文件集合),这些值以空格分隔,最后作为 foreach 函数的返回值。
对于 foreach 函数不理解的同学,可以参考:
Makefile中foreach函数的应用理解
本例程的最终目的,是将各子目录下的 .c 文件(可编译文件)列举出来。
总结
通配符 "*" 只有在命令和规则中使用它才会展开,如果在定义变量和函数中使用时,通配符 "*" 不会自动展开,这个时候就需要函数 wildcard 的配合使用。
Makefile中wildcard函数的应用理解相关推荐
- Makefile中wildcard使用方法
Makefile中wildcard函数使用方法 在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数"wild ...
- makefile中常用函数
Linux下编译c/c++源码需要编写makefile文件,文章参看 http://blog.sina.com.cn/s/blog_4c4d6e74010009jr.html 一函数的调用语法 二字符 ...
- Android Makefile中inherit-product函数和include的区别
在 Android Makefile中inherit-product函数和include都是执行某个文件. include 使用: include device/mediatek/mt2712/dev ...
- Makefile中patsubst函数使用方法
Makefile中patsubst函数使用方法 patsubst函数用于将文件模式进行替换. 一.作用 替换文件后缀. 二.格式 $(patsubst 原模式, 目标模式, 文件列表) 三.实例 ...
- Makefile中wildcard、notdir、patsubst函数的用法
Makefile 里的函数跟它的变量很相似--使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束. 在 GNU Make 里有一个叫 'wildcard' ...
- android file函数,Android Makefile中wildcard、notdir、patsubst函数的用法
Makefile 里的函数跟变量的使用方法很相似--用一个$符号跟左括号,函数名,空格后跟一列由逗号分隔的参数,最后用右括号回括. 在GNU Make里有一个叫 'wildcard' 的函数,它有一个 ...
- makefile 中 wildcard、notdir、patsubst、addprefix 解释
原文链接:https://blog.csdn.net/huofire001/article/details/83684446 目录 wildcard 获取跟当前模式匹配的文件名 查找一层目录 查找多层 ...
- C++多态中虚函数的深入理解
c++中动态多态性是通过虚函数来实现的.静态多态性是通过函数的重载来实现的,在程序运行前的一种早绑定,动态多态性则是程序运行过程中的一种后绑定.根据下面的例子进行说明. #include <io ...
- makefile中的函数
文章目录 1 foreach函数 2 wildcard函数 3 patsubst函数 4 filter 函数 5 filter-out函数 1 foreach函数 语法: $(foreach var, ...
最新文章
- yum安装nginx
- TFIDF的简单解释
- 项目常用工具类整理(五)--jar包整理
- android开发,静音录制视频,在一般清晰度的前提下保证文件大小越小越好
- Laravel以及Laravel-admin的命令行使用总结
- C++和C#相互调用COM组件的方法简介
- UWP 响应键盘组合快捷键
- SpringBoot 整合Shiro 一指禅
- 【Swing/文本组件】定义自动换行的文本域
- J2EE项目风险(翻译)
- qt银行排队系统服务器代码,QT银行叫号排队系统
- C# 繁体转简体 简体转繁体
- 【C语言开源库】C语言必备实用第三方库Melon(包括数据结构算法)
- 天翼云对象存储Java对接(经典版 Ⅱ型)
- 已解决:win11无法连接网络共享打印机的方法
- 这项Avatar专利,让我看到了未来苹果生态与AR/VR头显的融合
- TSC打印机使用教程终极版
- 豆瓣电台歌曲链接信息
- java 流式FlowLayout布局换行方法
- 连十分钟都坚持不了,学长你不行啊!
热门文章
- 2022年驾驶员考试挖掘机司机多选题专项训练及答案
- PPT里面的工具都是宝,用好不得了,这10个技巧你不得不知!
- C++ std::regex | 正则表达式
- 【软件工程】绘制状态转换图
- C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP
- 微信发朋友圈测试用例
- android room 主线程,Android Jetpack之Room篇
- 【Java开发 | 工具使用】JAVA使用exe4j打包项目为exe文件
- 计算机学院运动会解说词,学校运动会解说词30篇
- 玩吧公司,入职近半年的感受