make:调用多个文件的多个目标的命令?

mar*_*n2k 3 makefile

我希望优化现有的Makefile.它用于为给定目录中的每个日志文件创建多个图(使用Octave),使用脚本文件为每个以logfilename作为参数的图.在片刻中,我对每种可用的绘图都使用一个单独的规则,手写调用Octave,给出特定的scriptfile/logfile作为参数.

如果每个绘图都有"他的"八度脚本作为依赖项(当然还有日志文件),那将是很好的,因此如果他的脚本被更改,则只重新生成一个绘图.

由于我不想输入那么多,我想知道如何通过仅使用一条通用规则来构建"一个"情节来简化这一点?

为了更清楚:

  • 日志文件:"$(LOGNAME).log"
  • 脚本文件:"plot $(PLOTNAME).m"创建"$(LOGNAME)_ $(PLOTNAME).png"

我想到的第一件事:

%1_%2.png: %1.log
    $(OCTAVE) --eval "plot$<2('$<1')"
Run Code Online (Sandbox Code Playgroud)

但似乎不允许这样做.有人能给我一个暗示吗?

rei*_*ost 5

制作不直接支持这一点非常疯狂,我一直都需要它.

我目前使用的技术(使用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文档中.