Makefile中 wildcard 、 addprefix 及 patsubst 的用法(转)

Makefile中 wildcard 、 addprefix 及 patsubst 的用法

本文链接:https://blog.csdn.net/FJDJFKDJFKDJFKD/article/details/83032146

wildcard的用法1

wildcard即通配符,通常包括?以及*
在Makefile规则中,通配符会被自动展开。
但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数wildcard。语法是:$(wildcard PATTERN)
在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。
如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。

addprefix的用法

addprefix 顾名思义,作用是给每个string添加前缀,string之间用空格隔开。

$(addprefix prefixstr, string1 string2 ...)
如: $(addprefix chapters/, docx pdf jpg)

添加了前缀后最终会得到
chapters/docx
chapters/pdf
chapters/jpg

用法示例

src=main.
chap-dir=chapters
tmp-suffix = aux log out toc

tmp-files = $(addprefix ${src}, ${tmp-suffix})
tmp-files += $(wildcard $(addprefix ${chap-dir}/*, ${tmp-suffix}))

倒数第二句将 main. 作为前缀分别添加到aux log out toc,于是展开得到 main.aux main.log main.out main.toc
最后一句首先将 chapters/* 添加到 aux log out toc 前,展开后得到 chapters/*aux chapters/*log chapters/*out chapters/*toc。之后 wildcard 函数将得到匹配此模式的所有文件列表,即得到 chapters 目录下所有满足上述四种文件类型的文件名。

其他命令

  • notdir: 去除路径名
  • patsubst: 替换通配符(pattern substitute)

格式 $(patsubst <pattern>, <replacement>, <text>)

查找 <text> 中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式 <pattern>,如果匹配的话,则以 <replacement> 替换。这里,<pattern> 可以包括通配符“%”,表示任意长度的字串。如果 <replacement> 中也包含“%”,那么,<replacement> 中的这个“%”将是 <pattern> 中的那个“%”所代表的字串。
(可以用 “\”来转义,以 “\%” 来表示真实含义的 “%” 字符)。

建立如下目录结构
在这里插入图片描述

src=$(wildcard *.c */*.c */*/*.c)
dir=$(notdir $(src))
obj=$(patsubst %.c, %.o, $(src))

all:
	@echo $(src)
	@echo $(dir)
	@echo $(obj)
	@echo "end"

第一句话获取了当前目录及子目录下所有的匹配 .c 的文件名(包括路径)。如果目录深度增加的话,加 */ 即可。
第二句去除了或者文件名的路径信息。
第三句则是从第一句匹配到的字符串里将 .c 换成了 .o
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值