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

如何无需ARGS变量将可选参数从Makefile传递至Shell脚本?

解决方法

可以通过Makefile的内置变量和通配符规则实现直接传递这类参数,修改后的Makefile如下:

do-something:
	sh ./Scripts/do-something.sh "$(name)" $(filter-out $@,$(MAKECMDGOALS))

# 匹配所有未定义的目标,避免make报错
%:
	@:

原理说明

  • MAKECMDGOALS是Make的内置变量,会保存你在命令行指定的所有目标(比如这里的do-something、--noBar、--noBaz)
  • $(filter-out $@,$(MAKECMDGOALS))会过滤掉当前目标$@(也就是do-something),剩下的就是你传入的--noBar --noBaz,直接传给脚本即可
  • 最后那条%:规则是个通配符规则,匹配所有没有单独定义的“伪目标”(也就是你传的那些参数),@:表示执行空命令,避免make报错提示找不到这些目标

现在执行make do-something name=Foo --noBar --noBaz,就会自动把--noBar --noBaz传递给脚本,效果和直接调用sh ./Scripts/do-something.sh "Foo" --noBar --noBaz一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:42:05