makefile中でbashなどの関数が使えないのでdefineとcallで代用する
makefile中でbashの関数などを使うことができない(プロセス置換も使えないのだけれどこれはまだ代用品が見つかっていない)。 これの代用品としてcallとdefineを使う。
bashの場合
例えば以下のようなecho3という関数経由でxを3回yを3回出力したいとする。
#!/bin/bash function echo3() { echo $1 echo $1 echo $1 } echo3 x echo3 y
これをそのままMakefileに書くとsyntax errorで怒られる
call,defineを使って代用
define _echo3 echo $1 echo $1 echo $1 endef default: @$(call _echo3,x) @$(call _echo3,y)
defineは関数定義のためのものではなく変数定義のためのものなのだけれど。あと微妙に引数を渡す時に",“の間にスペースを入れられないとか異なるところがある。
$ make x x x y y y