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

如何向Makefile的依赖目标传递参数?

你将变量赋值写在all目标的依赖列表中是不生效的,Makefile的依赖列表只会被解析为目标名称,不会识别为变量声明,所以setup和clean目标拿不到对应参数。可以通过以下几种方法实现参数传递:

方案1:目标特定变量(所有依赖共用相同参数)

给all目标设置专属变量,该变量会自动作用于all自身的执行命令,以及它的所有依赖目标:

setup:
	@echo "setup 收到参数 myarg = $(myarg)"
	# 此处替换为你实际的setup命令

clean:
	@echo "clean 收到参数 myarg = $(myarg)"
	# 此处替换为你实际的clean命令

# 给all目标设置专属变量,所有依赖都会继承该值
all: myarg=value
# 声明all的依赖
all: setup clean
	@echo "setup & clean"

执行make all时,setup和clean都会自动拿到myarg=value的参数。

方案2:给不同依赖单独传不同参数

如果setup和clean需要不同的参数值,可以给每个目标单独设置专属变量:

setup:
	@echo "setup 收到参数 myarg = $(myarg)"

clean:
	@echo "clean 收到参数 myarg = $(myarg)"

# 给setup单独指定参数
setup: myarg=setup_val
# 给clean单独指定参数
clean: myarg=clean_val

all: setup clean
	@echo "setup & clean"

方案3:支持外部传参+内置默认值

如果你希望参数可以在执行make命令时手动覆盖,同时保留默认值,可以用条件赋值:

# 全局默认值:如果执行make时没有手动传myarg,就用该默认值
myarg ?= default_value

setup:
	@echo "setup 收到参数 myarg = $(myarg)"

clean:
	@echo "clean 收到参数 myarg = $(myarg)"

all: setup clean
	@echo "setup & clean"

这种方式下,执行make all会用默认的default_value,执行make all myarg=custom_val就会使用你传入的自定义参数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:48:04