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

如何在Makefile中移除自动变量$^的首个依赖并传递剩余部分作为参数

解决方案:移除$^中的首个依赖传递参数

当然可以实现这个需求!Makefile提供了内置函数帮你轻松处理依赖列表,不用再手动重复编写那些CSV文件路径。下面给你两种实用的方法:

方法1:使用wordlist提取从第2个开始的所有依赖

wordlist函数可以按位置范围提取列表中的元素,结合words函数获取依赖总数,就能精准跳过第一个依赖:

%/collapsed_flow_profile.png: \
code/piv/plot_collapsed_flow_profiles.R \
%/experiment2/averaged_flow_profile.csv \
%/experiment3/averaged_flow_profile.csv \
%/experiment4/averaged_flow_profile.csv \
%/experiment6/averaged_flow_profile.csv \
%/experiment7/averaged_flow_profile.csv
	code/piv/plot_collapsed_flow_profiles.R \
	$@ \
	$(wordlist 2,$(words $^),$^)
  • $(words $^):返回$^中所有依赖的总数量
  • $(wordlist 2, N, $^):从第2个元素(Makefile列表索引从1开始)到第N个元素,提取所有内容
  • 另外把$*/collapsed_flow_profile.png换成了$@,这是Makefile的自动变量,代表当前规则的目标文件,写法更简洁规范。

方法2:使用filter-out剔除首个依赖

filter-out函数可以从列表中移除指定的元素,结合$<(代表第一个依赖),就能直接去掉R脚本这个依赖:

%/collapsed_flow_profile.png: \
code/piv/plot_collapsed_flow_profiles.R \
%/experiment2/averaged_flow_profile.csv \
%/experiment3/averaged_flow_profile.csv \
%/experiment4/averaged_flow_profile.csv \
%/experiment6/averaged_flow_profile.csv \
%/experiment7/averaged_flow_profile.csv
	code/piv/plot_collapsed_flow_profiles.R \
	$@ \
	$(filter-out $<,$^)
  • $<:自动指向规则的第一个依赖(也就是你的R脚本)
  • $(filter-out $<,$^):从所有依赖$^中移除和$<匹配的元素,剩下的就是所有CSV文件路径

这两种方法在你的场景下效果完全一致,都能帮你避免手动重复维护依赖参数,以后新增或修改CSV依赖时,只需要更新规则的依赖列表即可,配方部分不用改动,让Makefile更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:42:44