TL;博士:
在您的生成文件中:
SHELL=bash
BASH_FUNC_command%%=() { ... }
export BASH_FUNC_command%%
长答案
我在非 make 上下文中使用 bash 做了类似的事情,在这里可以工作。
我在 bash 中声明了我的 shell 函数,然后将它们导出为:
export -f function-name
如果从 make 调用相同的 shell 作为子进程(在您的情况下),它们自然是可用的。
例子:
$ # 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来说并不难看