Makefile函数
持续记录中。。。
本文主要记录一些Makefile中使用过的相关函数和常规用法。
- filter
- wildcard
- patsubst
Makefile中的相关函数及其用法
filter
原型:$(filter pattern…,text)
返回值:返回text中任何与pattern匹配的以空格分隔的词,删除任何不匹配的词。模式是使用%编写的,就像上面patsubst函数中使用的模式一样。
filter函数可用于分离变量中不同类型的字符串(如文件名)。例如:
sources := foo.c bar.c baz.s ugh.h
.PHONY: all
all:
@echo "$(filter %.c %.s,${sources})" # foo.c bar.c baz.s
wildcard
原型:$(wildcard <pattern>)
用于匹配特定模式的文件。pattern是想要匹配的文件模式,包含*和?。
SRCS:=$(wildcard *.c)用于匹配当前目录下的所有.c文件。
SRCS:=$(wildcard src/*.c include/*.h)匹配src下的所有.c文件和include下的.h文件。
可以与patsubst函数结合使用,该函数用于替换文件后缀。
patsubst
原型:$(patsubst <pattern>, <replacement>, <text>)
<patter>是要匹配的模式,<replacement>是匹配成功后要替换的文本,<text>是原始的字符列表。
该函数将<text>中符合<pattern>模式的文本替换为<replacement>,可用于替换文件扩展名。
SRCS=main.cpp utils.cpp
OBJS=$(patsubst %.cpp, %.o, ${SRCS}) # main.o utils.o
常见用法
for…in
该循环结构可用于单个文件单独编译,也可以用于子目录循环编译。
SRCS=$(wildcard *.tex)
.PHONY: all
all: ${SRCS}
for item in $@; do xelatex $$item; done
- 原文作者:生如夏花
- 原文链接:https://DBL2017.github.io/post/%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7/makefile/makefile%E5%87%BD%E6%95%B0/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。