makefile中的函数

文章目录

    • 1 foreach
    • 2 filter/filter-out
    • 3 wildcard
      • 3.1 举例:获取当前目录下指定格式的所有文件名
      • 3.2 举例:获取当前目录下真实存在的所有文件名
    • 4 patsubst

1 foreach

语法:
$(foreach var,list,text)

作用:
对变量list中的每一个组成部分(以空格来分割)赋值给变量var,然后将var按照text的格式进行扩展。

示例:

A = a b c
B = $(foreach f, $(A), $(f).o)

all:
	@echo B = $(B)

结果:

B = a.o b.o c.o


2 filter/filter-out

语法:
$(filter pattern...,text) :在text中取出所有符合patten格式的值。
$(filter-out pattern...,text) :在text中取出所有不符合patten格式的值。

举例:

C = a b c d/

D = $(filter %/, $(C))
E = $(filter-out %/, $(C))

all:
        @echo D = $(D)
        @echo E = $(E)

结果:

D = d/
E = a b c


3 wildcard

语法:
$(wildcard pattern) :pattern定义了文件名的格式。
有如下两个作用:
1. 可以用来获取当前目录下指定格式的所有文件名。
2. 可以用来取出其中真实存在于当前目录下的文件。

3.1 举例:获取当前目录下指定格式的所有文件名

假设当前目录有文件a.c、b.c、c.c。

files = $(wildcard *.c)

all:
        @echo files = $(files)

结果:

files = a.c b.c c.c

3.2 举例:获取当前目录下真实存在的所有文件名

假设当前目前有文件a.c、b.c、c.c。

files2 = a.c b.c c.c d.c e.c  abc
files3 = $(wildcard $(files2))

all:
        @echo files3 = $(files3)

结果:

files3 = a.c b.c c.c


4 patsubst

语法:
$(patsubst pattern,replacement,$(var)):从var变量里面取出每一个值,如果符合pattern格式,把它替换成replacement格式。

举例:

files2  = a.c b.c c.c d.c e.c abc

dep_files = $(patsubst %.c,%.d,$(files2))

all:
        @echo dep_files = $(dep_files)

结果:

dep_files = a.d b.d c.d d.d e.d abc

你可能感兴趣的:(Linux)