持续记录中。。。

本文主要记录一些Makefile中使用过的相关函数和常规用法。

  1. filter
  2. wildcard
  3. 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