You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Makefile中扩展shell函数定义的作用域至整个规则?

Makefile规则内复用自定义shell函数的解决方法

你遇到的问题根源是:Make默认会为规则里的每一行命令单独启动一个shell进程,第一行定义的shell函数仅在当前进程有效,到第二行的新进程就无法识别了。要让函数作用域覆盖整个规则,有两种可行方案:

方法一:用反斜杠续行,共享同一个shell

把规则内的多行命令用反斜杠(\)连接,Make会将它们当作单个shell命令执行,函数就能在后续行复用:

default:
    myFunc() { echo "Called"; }; \
    myFunc; \
    echo "再次调用函数:"; \
    myFunc;

方法二:使用.ONESHELL伪目标(GNU Make 3.82+支持)

如果你的Make是GNU Make 3.82及以上版本,可在Makefile开头添加.ONESHELL,这样整个规则的所有命令都会在同一个shell实例中运行,无需手动加反斜杠:

.ONESHELL:
default:
    myFunc() { echo "Called"; };
    myFunc;
    echo "再次调用函数:";
    myFunc;

注意:.ONESHELL是GNU Make专属特性,若使用非GNU版本的Make,方法一的兼容性更强。

内容的提问来源于stack exchange,提问作者Jaxon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:12:39