Makefile常用函数

本文深入解析Makefile中的七个核心函数:foreach、filter、filter-out、Wildcard、patsubst、notdir及addsuffix,通过实例展示它们的功能与用法,帮助读者掌握Makefile构建过程中的关键技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Makefile常用函数

1. foreach函数

  • 此函数使用循环操作,是仿照Unix标准shell的for语句;

  • 语法

    $(foreach <var>,<list>,<text>)
    
    • 流程

        1. 将参数列表的单词逐一取出
        2. 将取出的单词放到指定的变量之中
        3. 执行 所包含的表达式
        4. 执行第一步~第3步
        5. 循环结束, 返回的是每个字符串所组成的整个字符串(空格分隔)
    • 举例

      names := a b c d
      files := $(foreach n,$(names),$(n).o)
      #输出结果为 --> files的值为 "a.o b.o c.o d.o"
      #注意:n是一个局部变量,foreach函数执行结束,n将消失
      

2. filter函数

  • 名称:过滤函数

  • 语法

    $(filter <pattern...>,<text>)
    
  • 功能:以模式过滤 字符串中的单词,保留符合模式的单词。可以包含多个模式。

  • 返回:符合模式的字符串

  • 举例

    sources := beep.c dealay.c beep.h start.s
    beep : $(sources)
    	gcc -o $@ $(filter %.c %.s,$(sources)) 
    # $(filter %.c %.s,$(sources))的返回值是"beep.c dealy.c start.s"
    

3. filter-out函数

  • 名称:反过滤函数

  • 语法

    $(filter-out <pattern...>,<text>)
    
  • 功能:以模式过滤 字符串中的单词, 去除符合模式的单词。可以包含多个模式。

  • 返回:返回不符合模式的字符串

  • 举例

    objects := main.o start.s config.c system.o
    main := main.o system.o
    files := $(filter-out $(main),$(objects))
    # $(filter-out $(main),$(objects))的返回值为“start.s config.c system.o”
    

4. Wildcard函数

  • 名称:扩展通配符

  • 语法

    $(wildcard pattern...)
    
  • 功能:以pattern的格式,寻找真实存在的文件

  • 返回:返回存在文件的名字

  • 举例

    # 创建三个文件 a.c b.c c.c
    files := $(wildcard *.c)
    
    all:
    	@echo files = $(files)
    # 结果:files = a.c b.c c.c
    

5. patsubst函数

  • 名称:模式字符串替换函数

  • 语法

    $(patsubst <pattern>,<replacement>,<text>)
    
  • 功能:查找 中的单词是否符合模式,如果匹配的话,以的格式进行替换

  • 返回:函数返回被替换过后的字符串

  • 举例

    files := a.c b.c c.c d.c abc
    
    sub_files := $(patsubst %.c,%.d,$(files))
    
    all:
    	@echo sub_files = $(sub_files)
    	
    # 结果 sub_files = a.d b.d c.d .d.d abc
    

6. notdir函数

  • 名称:取文件函数

  • 语法

    $(notdir <names...>)
    
  • 功能:从文件名序列中取出非目录部分的文件。–>也就是路径名中不包含“/”

  • 返回:返回文件序列的非目录部分。

  • 举例

    $(notdir src/foo.c dealy.c)
    
    #返回值为“foo.c dealy.c ”
    

7. addsuffix函数

  • 名称:加后缀函数

  • 语法

    $(addsuffix <suffix>,<names...>)
    
  • 功能:把后缀加到中的每个单词后面

  • 返回:返回添加过后缀的文件名序列

  • 举例

    $(addsuffix .c,foo bar)
    
    # 返回值为“foo.c bar.c"
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来鸟 鸣间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值