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
hxxepatsubst
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凝ったことをしない限りこれに困らされることはありませんが、やはり特性にあった使い方をするのが大事かなと思います。