前回は条件付き展開を行うif関数、or関数、and関数を取り上げた。今回は繰り返し展開を行うforeach関数を取り上げる。この関数は結構特殊だ。シェルスクリプトの「for-in」に似ているものの、あくまでも変数展開を主な目的としているという違いがあり、GNU makeに特有の機能と言っても良いかもしれない。今回はこの点について説明しよう。

foreach関数のシンタックスと主な機能

foreach関数のシンタックスと主な機能は次のようになっている。

関数 シンタックス
foreach $(foreach 変数,リスト,テキスト)
関数 内容
foreach 第1引数と第2引数を評価し、第2引数のリストの最初の値を第1引数で指定された変数に代入し、その変数を使って第3引数を評価する。次に第2引数のリストの次の値を第1引数で指定された変数に代入し、その値を使って第3引数を評価する。このように評価を第2引数のリストの値に対してすべて実施するまで繰り返し、評価された全ての第3引数の値をこの関数の値として置換する

foreach関数は、説明を読んだだけだとよくわからないかもしれない。foeach制御構文の動きを知っていれば、何となく動きは予測がつくと思うが、あくまでもその動作は$()の中で完結するので制御構文ともちょっと違う。

動きを理解するのはなかなか難しい機能なのだが、GNU makeではこの関数が使われることが多いので、どのように動くのかは理解しておく必要がある。実際にMakefileで試しながら動きを追っていこう。