0
点赞
收藏
分享

微信扫一扫

Makefile 函数

1.函数foreach

$(foreach var ,list,text)

A= a b c

B=$(foreach f ,$(A),$(f).o)

all:

@echo B =$(B)

结果: B =a.o b.o c.o

解释理解:

前两个参数,‘var’和‘list’,将首先扩展,注意最后一个参数 ‘text’ 此时不扩展;接着,对每一个 ‘list’ 扩展产生的字,将用来为 ‘var’ 扩展后命名的变量赋值;然后 ‘text’ 引用该变量扩展;因此它每次扩展都不相同。结果是由空格隔开的 ‘text’。在 ‘list’ 中多次扩展的字组成的新的 ‘list’。‘text’ 多次扩展的字串联起来,字与字之间由空格隔开,如此就产生了函数 foreach 的返回值。


2.filter/filter-out

函数filter/filter-out 语法如下

$(filter pattern...,text)   从text的字符中,取出符合pattern样式的的字符。

$(filter-out pattern...,text)  从text的字符中,去除除了pattern样式的字符。

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

wildcard

函数wildcard语法

$(wildcard pattern)   取出pattern样式的文件,最后返回这些文件名。

实列:

在该目录下面创建三个文件:a.c b.c c.c

files=$(wildcard *.c)

all:

@echo files=$(files)

结果:

files=a.c b.c c.c


patsubst函数

函数patsubst语法如下:

$(patsubst pattern,replacement,\$(var))

patsubst函数是将var里面的每一个值,如果这个值符合pattern的样式,这将所有符合pattern样式

的值,全部替换为replacement。

实列:

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

rp_files=$(patsubst %.c,%.o,$(files2))

all:

@echo rp_files=$(rp_files)

结果是:

rp_files=a.o b.o c.o d.o e.o abc








举报

相关推荐

0 条评论