December 08, 2020
文字列の関数
make の関数は $(function arguments)
の形式で呼び出します。
arguments はカンマ(,
)区切りで複数指定できますし、空白区切りのリストも指定できます。
文字列に関する関数はいくつかありますが、主に使うのが subst
と patsubst
です。
subst
subst は単純に文字列を置換する関数です。
$(subst from,to,text)
subst:
echo $(subst og,xx,hoge)
$ make subst
echo hxxe
hxxe
patsubst
patsbust は簡単なパターン置換を行う関数です。
$(patsubst pattern,replacement,text)
%
を含むパターンを置換します。
patsubst:
echo $(patsubst %a,%,hoge fuga vaa)
$ make patsubst
echo hoge fug va
hoge fug va
代用参照
シェルの変数展開(Parameter Expansion)のように、 文字列を置換できるのが「代用参照(Substitution Reference)です。
$(var:pattern=replacement)
代用参照は patsubst と同じように動くので、先程の例はこのように書けます。 一度変数に格納しないといけませんが、短く書けます。
var := hoge fuga vaa
subst-ref:
$(var:%a=%)
$ make subst-ref
echo hoge fug va
hoge fug va
残念なカンマ
なんとも残念な感じですが、make の関数呼び出しではカンマ(,
)が扱えません。
エスケープする手段もないため、このように一度変数化して展開する必要があります。
clist := hoge,fuga,vaa
comma := ,
comma:
echo $(subst $(comma), , $(clist))
$ make comma
echo hoge
hoge
凝ったことをしない限りこれに困らされることはありませんが、やはり特性にあった使い方をするのが大事かなと思います。