我想使用makefile来更新R代码生成的图形文件. R代码在目录../R中的各种文件中,所有文件以.R结尾.图形文件位于目录../figs中,全部以.pdf或.png结尾.如果R文件的日期比任何图形文件更晚,我想使用该命令处理R文件
R --no-save < file.R
我已经看了一个各种示例makefile,但找不到任何可以适应的东西.
我目前的努力(不工作)如下:
PLOTDIR= ../figs RDIR= ../R RFILES= $(RDIR)/*.R PLOTS= *.pdf *.png FIGURES= $(PLOTDIR)/$(PLOTS) $(FIGURES): $(RFILES) R --no-save < $<
解决方法
你可以尝试以下几点.
# Makefile # Beware of indentation when copying use TABS PLOTDIR = ../figs RDIR = ../R # list R files RFILES = $(wildcard $(RDIR)/*.R) # compute output file names PDF_FIGS = $(RFILES:.R=.pdf) PNG_FIGS = $(RFILES:.R=.png) # relocate files in output folder OUT_FILES = $(subst $(RDIR),$(PLOTDIR),$(PDF_FIGS) $(PNG_FIGS)) # first target is the default: simply do 'make' all: $(OUT_FILES) clean: rm $(OUT_FILES) .PHONY: all clean # need to split PNG from PDF rules $(PLOTDIR)/%.png: $(RDIR)/%.R R --no-save < $< $(PLOTDIR)/%.pdf $(PLOTDIR)/%.png: $(RDIR)/%.R R --no-save < $<
PLOTDIR= ../figs RDIR= ../R # list R files RFILES := $(wildcard $(RDIR)/*.R) # relocate files in output folder OUT_FILES=$(subst $(RDIR),$(RFILES:.R=.out)) #$(warning $(OUT_FILES)) # first target is the default: simply do 'make' all: $(OUT_FILES) clean: rm $(OUT_FILES) .PHONY: all clean $(PLOTDIR)/%.out: $(RDIR)/%.R R --no-save < $< && touch $@