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

求助:Makefile中模式规则无法匹配目标问题

问题解决:GNU Make多%模式规则不匹配的原因及修复

问题根源

你编写的模式规则$(OUT_FLD)/%/.wit_%包含两个%通配符,但GNU Make的普通模式规则(非静态模式)仅支持单个%。多个%会被Make识别为字面量字符,而非匹配相同文本的通配符,因此无法匹配out/target/.wit_target这个目标。

修复方案

方案1:使用静态模式规则

静态模式规则支持在模式中使用多个%,只要所有%匹配相同的文本即可。修改后的Makefile如下:

OUT_FLD = out

# 明确指定要匹配的目标列表
TARGETS := $(OUT_FLD)/target/.wit_target

target: $(TARGETS)

# 静态模式规则:针对TARGETS列表中的目标应用模式
$(TARGETS): $(OUT_FLD)/%/.wit_%:
	@echo "Creating target: $*"
	@mkdir -p $(@D)  # 先创建目标所在目录
	@touch $@

.PHONY: target

方案2:调整规则结构,使用单一%

如果不想用静态模式,可以重构目标路径,让规则只用一个%:

OUT_FLD = out

target: $(OUT_FLD)/target/.wit_target

# 用%匹配完整的子路径+目标名部分
$(OUT_FLD)/%:
	@TARGET_NAME=$(notdir $(basename $*))
	@echo "Creating target: $$TARGET_NAME"
	@mkdir -p $(@D)
	@touch $@

不过这种写法需要额外处理目标名称,不如静态模式直观。

验证

运行make -f makefiles/test.mk target,会看到输出Creating target: target,同时生成out/target/.wit_target文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:53:19