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 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。