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

Makefile动态依赖未展开问题:自定义前缀批量生成目标与依赖

解决Makefile中TSV目标依赖对应单个CSV文件的问题

嘿,我来帮你搞定这个Makefile的问题!你遇到的核心问题是模式规则的依赖写错了——你现在让每个.tsv目标都依赖所有的.csv文件,而不是对应的单个同名文件。

问题根源分析

你原代码里的规则:

%.tsv: $(PR)

这里$(PR)会展开成foo.csv bar.csv,所以每个.tsv目标的依赖都是这两个文件。而$<代表规则的第一个依赖文件,所以不管是foo.tsv还是bar.tsv,都会取第一个依赖foo.csv来输出,这就导致了你看到的错误结果。

修正后的Makefile

只需要把模式规则的依赖改成对应的单个.csv文件即可,利用Make的模式匹配特性,让%.tsv自动关联%.csv:

NAMES = foo bar
PR = $(patsubst %,%.csv,$(NAMES))
TB = $(patsubst %,%.tsv,$(NAMES))

all: $(TB)

# 让每个.tsv目标只依赖同名的.csv文件
%.tsv: %.csv
	@echo $< $@

测试输出

运行这个修正后的Makefile,会得到你预期的结果:

foo.csv foo.tsv
bar.csv bar.tsv

额外简化说明

如果你不需要PR这个变量做其他事情,其实可以直接删掉它,因为模式规则已经能自动关联对应的依赖文件了,简化后的代码也能正常工作:

NAMES = foo bar
TB = $(patsubst %,%.tsv,$(NAMES))

all: $(TB)

%.tsv: %.csv
	@echo $< $@

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:58:15