文章目录

  • 前言

前言

语法:
$(wildcard PATTERN...)
在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表


一般我们可以使用“$(wildcard *.c)”来获取工作目录下的所有的.c文件列表。复杂一些用法;可以使用“$(patsubst %.c,%.o,$(wildcard *.c))”,首先使用“wildcard”函数获取工作目录下的.c文件列表;之后将列表中所有文件名的后缀.c替换为.o。这样我们就可以得到在当前目录可生成的.o文件列表。因此在一个目录下可以使用如下内容的Makefile来将工作目录下的所有的.c文件进行编译并最后连接成为一个可执行文件.

#sample Makefileobjects := $(patsubst %.c,%.o,$(wildcard *.c))
foo : $(objects)cc -o foo $(objects)

这里我们使用了make的隐含规则来编译.c的源文件。对变量的赋值也用到了一个特殊的符号(:=)。

1、wildcard : 扩展通配符
2、notdir : 去除路径
3、patsubst :替换通配符

例子

  1. 建立一个测试目录,在测试目录下建立一个名为sub的子目录

    $ mkdir test
    $ cd test
    $ mkdir sub
    
  2. 在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件

    建立一个简单的Makefile

    src=$(wildcard *.c ./sub/*.c)
    dir=$(notdir $(src))
    obj=$(patsubst %.c,%.o,$(dir) )
    all:@echo $(src)@echo $(dir)@echo $(obj)@echo "end"
    

    第一行输出:

    a.c b.c ./sub/sa.c ./sub/sb.c
    

    wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。

    第二行输出:

    a.c b.c sa.c sb.c
    

    notdir把展开的文件去除掉路径信息

    第三行输出:

    a.o b.o sa.o sb.o
    

    $(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o
    或者可以使用obj=$(dir:%.c=%.o)效果也是一样的。

MAKEFILE【4】-Makefile中的wildcard用法相关推荐

  1. Makefile中的wildcard用法

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

  2. Makefile中的wildcard patsubst

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

  3. linux中makefile高级用法--makefile调用makefile

    一.介绍 在大型项目中,makefile调用makefile很常见,也很方便,这里给出调用方法 二.实例 1.代码树 app_top下,有顶层makefile和编译工具的设置文件Rules.make, ...

  4. 【makefile笔记】patsubst和wildcard函数使用小结

    0x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解: 如果在文章中发现代码错误或其它问题请告知,感谢! 0x01 makefile函数调用语法 makefile函数调用原型: $(< ...

  5. 【Linux + Makefile】Makefile中的.PHONY作用以及赋值运算(各种=符号)的区别

    笔者常年在Linux环境编程,经常在项目中与Makefile打交道,最近总结了几个Makefile的小的知识点,分享给大家. 通过阅读本文,你将了解到以下知识: 1.Makefilke中的.PHONY ...

  6. Makefile和automake中判断CPU位数

    Makefile中: cpu_bit=$(shell getconf LONG_BIT) ifeq ($(cpu_bit),64)     MY_CXXFLAGS= else     MY_CXXFL ...

  7. linux中make的用法

    一.linux中make的用法   目的:        基本掌握了make 的用法,能在Linux系统上编程. 环境:        Linux系统 准备:        准备三个文件:file1. ...

  8. Linux之make的用法讲解,linux中make的用法

    1.linux中make的用法 目的: 基本掌握了make 的用法,能在Linux系统上编程. 环境: Linux系统 准备: 准备三个文件:file1.c, file2.c, file2.h fil ...

  9. 浅显易懂 Makefile 入门 (01)— 什么是Makefile、为什么要用Makefile、Makefile规则、Makefile流程如何实现增量编译

    1. 什么是 Makefile Makefile 文件描述了 Linux 系统下 C/C++ 工程的编译规则,它用来自动化编译 C/C++ 项目.一旦写编写好 Makefile 文件,只需要一个 ma ...

最新文章

  1. PXE批量部署linux操作系统
  2. C++友元函数和友元类(二)
  3. php检测非法字符的一种方法
  4. 电脑安装软件出现更改计算机怎么回事,win10电脑总是自动安装软件怎么办
  5. 假笨说-谨防JDK8重复类定义造成的内存泄漏
  6. gedit把关键字符替换为回车键
  7. Gun N' Rose 小组分工、项目制品与贡献率计算
  8. [vue] 怎么在watch监听开始之后立即被调用?
  9. Android系列---JSON数据解析
  10. AI主播首次上岗CCTV,撒贝宁有了个虚拟孪生兄弟“小小撒”
  11. 如何把多个文件夹里的文件提取出来?
  12. html微信悬浮窗,微信悬浮窗怎么设置(微信浮窗设置的两个小技巧)
  13. 期末考试打乱考研数学复习,该怎么继续?
  14. Linux网站服务之部署Wordpress教程
  15. 程序员兼职网站(自由职业)
  16. django项目中实现excel表数据导入
  17. python 网络通讯 plc_Python TCP通信网络编程
  18. “燕云十六将”之毛毛杜倩(7)
  19. 论文勘误 (Paper erratum)
  20. symfony入门学习资料之十六:Symfony框架启动过程介绍

热门文章

  1. C#拆分PPT、PPT转视频、PPT转图片
  2. CSS入门学习笔记+案例(1)
  3. edk2中的fdf文件简介
  4. 2018 IDEA Intellij 和 DataGrip的激活方式(至10月)
  5. 淡水鱼生鱼片含有大量肝吸虫 可寄生于肝脏内30年
  6. 【BZOJ4027】【HEOI2015】兔子与樱花 贪心
  7. 邓俊辉 数据结构 词典
  8. java题库难_为什么平常写项目感觉java也不是那么难,一到面试刷题得时候感觉那么吃力呢。你们呢?...
  9. 增加检测类别?这是一份目标检测的基础指南
  10. Python中路径的写法