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

Makefile目标模式匹配异常:为何make foo_bar/bar执行报错?

问题:Makefile模式规则匹配失败排查

编写的Makefile规则

%_file:
     touch $@

foo_%: %_file

bar: foo_bar

执行命令后的报错

>make foo_bar
make: *** No rule to make target 'foo_bar'.  Stop.

>make bar
make: *** No rule to make target 'foo_bar', needed by 'bar'.  Stop.

用户疑问

我刻意未添加.PHONY规则,因为我知道伪目标的依赖始终按字面量解析,不理解为何上述命令无法正常执行,请问我遗漏了什么?


问题原因与解决方法

问题出在命令行的缩进格式上。Makefile有严格的语法要求:规则中的命令行必须以Tab键开头,而你当前的touch $@前面用的是空格缩进。

当Make解析%_file规则时,由于命令行没有用Tab开头,它会判定这个规则没有定义任何可执行命令。后续尝试生成foo_bar时,需要先通过%_file规则生成依赖bar_file,但因为该规则没有有效命令,Make无法创建bar_file,整个规则链因此断裂,最终报错找不到目标。

只需将touch $@前面的空格替换为Tab键,修正后的Makefile如下:

%_file:
	touch $@

foo_%: %_file

bar: foo_bar

此时执行make foo_bar或make bar即可正常运行:Make会先通过%_file规则生成bar_file,再基于foo_%规则(依赖bar_file已存在)认定foo_bar满足要求,完成构建流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:20:50