我希望优化现有的Makefile.它用于为给定目录中的每个日志文件创建多个图(使用Octave),使用脚本文件为每个以logfilename作为参数的图.在片刻中,我对每种可用的绘图都使用一个单独的规则,手写调用Octave,给出特定的scriptfile/logfile作为参数.
如果每个绘图都有"他的"八度脚本作为依赖项(当然还有日志文件),那将是很好的,因此如果他的脚本被更改,则只重新生成一个绘图.
由于我不想输入那么多,我想知道如何通过仅使用一条通用规则来构建"一个"情节来简化这一点?
为了更清楚:
我想到的第一件事:
%1_%2.png: %1.log
$(OCTAVE) --eval "plot$<2('$<1')"
Run Code Online (Sandbox Code Playgroud)
但似乎不允许这样做.有人能给我一个暗示吗?
制作不直接支持这一点非常疯狂,我一直都需要它.
我目前使用的技术(使用GNU make)(以Didier Trosset为例):
define OCT_template
all: %_$(1).png
%_$(1).png: %.log
$$(OCTAVE) --eval "plot$(1)('$$*')"
endef
PLOT_NAMES = plot1 plot2 plot3
$(foreach p, $(PLOT_NAMES), \
$(eval $(call OCT_template,$(p))) \
)
Run Code Online (Sandbox Code Playgroud)
这是在GNU make文档中.