makefile之patsubst,wildcard和notdir
文章目录
- 1 patsubst: 替换通配符
- 2 wildcard: 扩展通配符
- 3 notdir: 去除路径
- 4 综合应用
- 5 扩展
- 参考原地址
因为项目中用到了patsubst,所以记录一下。
1 patsubst: 替换通配符
格式:$(patsubst <pattern>,<replacement>,<text> )
- 名称:模式字符串替换函数——patsubst。
- 功能:查找text中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式pattern,如果匹配的话,则以替换。
这里,pattern可以包括通配符“%”,表示任意长度的字串。如果replacement中也包含“%”,那么,replacement中的这个“%”将是pattern中的那个“%”所代表的字串。
(可以用“\”来转义,以“%”来表示真实含义的“%”字符)- 返回:函数返回被替换过后的字符串。
- 示例:
$(patsubst %.c,%.o, 1.c 2.c)
把字串“1.c,2.c”符合模式[%.c]的单词替换成[%.o],返回结果是“1.o 2.o”
2 wildcard: 扩展通配符
wildcard得到指定目录下所有的C语言源程序文件名
SRC = $(wildcard *.c)
编译当前目录下所有.c文件,如果还有子目录,比如子目录为inc,则:
SRC = $(wildcard *.c) $(wildcard inc/*.c)
3 notdir: 去除路径
notdir把展开的文件去除掉路径信息
4 综合应用
- 首先创建如下的目录结构

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

wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。
notdir把展开的文件去除掉路径信息
patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o
第三句相当于obj=$(dir:%.c=%.o)
5 扩展
Makefile有三个非常有用的变量。分别是 @ , @, @,^,$<代表的意义分别是:
$@---------------------------目标文件
$^----------------------------所有的依赖文件
$<----------------------------第一个依赖文件
- 下面给出傻瓜的makefile
main:main.o 1.o 2.ogcc -o main main.o 1.o 2.omain.o:main.c 1.h 2.hgcc -c main.c1.o:1.c 1.hgcc -c 1.c2.o:2.c 2.hgcc -c 2.c
- 简化后变成了
main:main.o 1.o 2.ogcc -o $@ $^main.o:main.c 1.h 2.hgcc -c $<1.o:1.c 1.hgcc -c $<2.o:2.c 2.hgcc -c $<
- 在此简化
main:main.o 1.o 2.ogcc -o $@ $^.c.o:gcc -c $<
表示所有的 .o文件都是依赖与相应的.c文件的
参考原地址
https://www.cnblogs.com/baiduboy/p/6849587.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
