makefile中でbashなどの関数が使えないのでdefineとcallで代用する

makefile中でbashの関数などを使うことができない(プロセス置換も使えないのだけれどこれはまだ代用品が見つかっていない)。 これの代用品としてcalldefineを使う。

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