文章目录

前言

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函数的应用理解相关推荐

  1. Makefile中wildcard使用方法

    Makefile中wildcard函数使用方法 在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数"wild ...

  2. makefile中常用函数

    Linux下编译c/c++源码需要编写makefile文件,文章参看 http://blog.sina.com.cn/s/blog_4c4d6e74010009jr.html 一函数的调用语法 二字符 ...

  3. Android Makefile中inherit-product函数和include的区别

    在 Android Makefile中inherit-product函数和include都是执行某个文件. include 使用: include device/mediatek/mt2712/dev ...

  4. Makefile中patsubst函数使用方法

    Makefile中patsubst函数使用方法   patsubst函数用于将文件模式进行替换. 一.作用 替换文件后缀. 二.格式 $(patsubst 原模式, 目标模式, 文件列表) 三.实例 ...

  5. Makefile中wildcard、notdir、patsubst函数的用法

    Makefile 里的函数跟它的变量很相似--使用的时候,你用一个 $ 符号跟开括号,函数名,空格后跟一列由逗号分隔的参数,最后用关括号结束. 在 GNU Make 里有一个叫 'wildcard' ...

  6. android file函数,Android Makefile中wildcard、notdir、patsubst函数的用法

    Makefile 里的函数跟变量的使用方法很相似--用一个$符号跟左括号,函数名,空格后跟一列由逗号分隔的参数,最后用右括号回括. 在GNU Make里有一个叫 'wildcard' 的函数,它有一个 ...

  7. makefile 中 wildcard、notdir、patsubst、addprefix 解释

    原文链接:https://blog.csdn.net/huofire001/article/details/83684446 目录 wildcard 获取跟当前模式匹配的文件名 查找一层目录 查找多层 ...

  8. C++多态中虚函数的深入理解

    c++中动态多态性是通过虚函数来实现的.静态多态性是通过函数的重载来实现的,在程序运行前的一种早绑定,动态多态性则是程序运行过程中的一种后绑定.根据下面的例子进行说明. #include <io ...

  9. makefile中的函数

    文章目录 1 foreach函数 2 wildcard函数 3 patsubst函数 4 filter 函数 5 filter-out函数 1 foreach函数 语法: $(foreach var, ...

最新文章

  1. yum安装nginx
  2. TFIDF的简单解释
  3. 项目常用工具类整理(五)--jar包整理
  4. android开发,静音录制视频,在一般清晰度的前提下保证文件大小越小越好
  5. Laravel以及Laravel-admin的命令行使用总结
  6. C++和C#相互调用COM组件的方法简介
  7. UWP 响应键盘组合快捷键
  8. SpringBoot 整合Shiro 一指禅
  9. 【Swing/文本组件】定义自动换行的文本域
  10. J2EE项目风险(翻译)
  11. qt银行排队系统服务器代码,QT银行叫号排队系统
  12. C# 繁体转简体 简体转繁体
  13. 【C语言开源库】C语言必备实用第三方库Melon(包括数据结构算法)
  14. 天翼云对象存储Java对接(经典版 Ⅱ型)
  15. 已解决:win11无法连接网络共享打印机的方法
  16. 这项Avatar专利,让我看到了未来苹果生态与AR/VR头显的融合
  17. TSC打印机使用教程终极版
  18. 豆瓣电台歌曲链接信息
  19. java 流式FlowLayout布局换行方法
  20. 连十分钟都坚持不了,学长你不行啊!

热门文章

  1. 2022年驾驶员考试挖掘机司机多选题专项训练及答案
  2. PPT里面的工具都是宝,用好不得了,这10个技巧你不得不知!
  3. C++ std::regex | 正则表达式
  4. 【软件工程】绘制状态转换图
  5. C专家编程 第11章 你懂得C,所以C++不再话下 11.1 初识OOP
  6. 微信发朋友圈测试用例
  7. android room 主线程,Android Jetpack之Room篇
  8. 【Java开发 | 工具使用】JAVA使用exe4j打包项目为exe文件
  9. 计算机学院运动会解说词,学校运动会解说词30篇
  10. 玩吧公司,入职近半年的感受