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

如何在Makefile中向依赖目标的脚本传递运行时参数

解决Makefile中传递运行时参数给依赖目标的问题

你的需求可以通过两种常见方式实现,具体选择取决于你是否需要根据参数变化控制脚本的执行次数:

方式1:把downstream设为伪目标

如果不管之前有没有执行过,每次运行make upstream都要重新执行my_script.sh,直接把downstream标记为.PHONY目标即可。伪目标会被Make认定为永远“过时”,所以每次都会执行对应的命令,确保传入的MY_HASH能被脚本获取到。

修改后的Makefile代码:

.PHONY: upstream downstream

upstream: downstream
downstream:
		my_script.sh $(MY_HASH)

执行时直接使用make upstream MY_HASH=latest或者make upstream MY_HASH=123abc,脚本就能接收到对应的参数。

方式2:基于参数状态触发执行

如果希望只有当MY_HASH变化时才重新执行my_script.sh(避免重复执行相同参数的冗余操作),可以添加一个记录参数状态的文件,让downstream依赖这个文件:

upstream: downstream

downstream: .my_hash
		my_script.sh $(MY_HASH)

.my_hash:
		echo $(MY_HASH) > $@

工作逻辑:Make会检查.my_hash文件里的内容是否和当前传入的MY_HASH一致。如果不一致,就会重新生成这个文件并执行downstream的命令;如果一致,则跳过执行。

额外提示:可以在Makefile开头加个参数检查,防止忘记传MY_HASH:

ifndef MY_HASH
$(error 必须传入MY_HASH参数,格式为make upstream MY_HASH=xxx)
endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:32:47