TL; DR:
makefile内:
SHELL=bash
BASH_FUNC_command%%=() { ... }
export BASH_FUNC_command%%
長い答え
ここで機能する非makeコンテキストでbashと同様のことを行いました。
シェル関数をbashで宣言してから、次のコマンドでエクスポートしました。
export -f function-name
同じシェルがサブプロセスとして呼び出された場合(あなたの場合はmakeから)、それらは自然に利用可能になります。
例:
$ # define the function
$ something() { echo do something here ; }
$ export -f something
$ # the Makefile
$ cat > Makefile <<END
SHELL=bash
all: ; something
END
$
やってみよう
$ make
something
do something here
$
これは環境でどのように見えますか?
$ env | grep something
BASH_FUNC_something%%=() { echo do something here
したがって、Makefile内から環境変数を設定する方法が問題になります。パターンはBASH_FUNC_function -name %% =(){ function-body }のようです
make内で直接
では、これはどのように機能しますか?このmakefileを試してください
SHELL=bash
define BASH_FUNC_something-else%%
() {
echo something else
}
endef
export BASH_FUNC_something-else%%
all: ; something-else
そしてそれを試してみてください:
$ make
something-else
something else
Makefileでは少し醜いですが、 make-nの醜さはありません。