foreach 函数
foreach函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语句,或是C-Shell(/bin/csh)中的foreach语句而构建的。它的语法是:
- $(foreach <var>,<list>,<text>)
这个函数的意思是,把参数 <list>
中的单词逐一取出放到参数 <var>
所指定的变量中,然后再执行 <text>
所包含的表达式。每一次 <text>
会返回一个字符串,循环过程中,<text>
的所返回的每个字符串会以空格分隔,最后当整个循环结束时, <text>
所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值。
所以, <var>
最好是一个变量名, <list>
可以是一个表达式,而 <text>
中一般会使用 <var>
这个参数来依次枚举 <list>
中的单词。举个例子:
- names := a b c d
- files := $(foreach n,$(names),$(n).o)
上面的例子中, $(name)
中的单词会被挨个取出,并存到变量 n
中, $(n).o
每次根据 $(n)
计算出一个值,这些值以空格分隔,最后作为foreach函数的返回,所以, $(files)
的值是 a.o b.o c.o d.o
。
注意,foreach中的 <var>
参数是一个临时的局部变量,foreach函数执行完后,参数 <var>
的变量将不在作用,其作用域只在foreach函数当中。