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

如何在Makefile中使用%过滤器触发其他目标执行?

解决Makefile通配符目标触发对应子目标的问题

问题场景

你想通过%-all这种带通配符的目标,自动触发1-check、2-check这类对应目标的执行,但直接在%-all里写$*会失效——因为Make会把它当成shell命令执行,而不是去构建Makefile里定义的目标。

正确实现方式

方式一:通过$(MAKE)调用自身构建目标

修改你的Makefile如下:

1-check: 
	echo "1"

2-check:
	echo "2"

run-check: 
	$(MAKE) 1-check-all 2-check-all

%-all: 
	$(MAKE) $*
  • $(MAKE)是Make的内置变量,指向当前使用的Make工具,用它调用自身能保证跨平台正常工作。
  • 执行make run-check时,会先触发1-check-all和2-check-all,这两个目标又会通过$(MAKE) $*分别调用make 1-check和make 2-check,最终输出1和2。
  • 如果不想看到Make打印执行的命令,可以在命令前加@,比如@$(MAKE) $*。

方式二:利用依赖关系实现(更符合Makefile逻辑)

另一种更推荐的写法是把对应目标设为%-all的依赖,这样Make会自动先构建依赖目标:

1-check: 
	echo "1"

2-check:
	echo "2"

run-check: 1-check-all 2-check-all

%-all: $*
	# 这里如果不需要额外操作,留空即可

这种写法下,构建1-check-all时,Make会先检查并构建它的依赖1-check,自动完成你想要的触发效果,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:06