与Sweave的Makefile依赖关系

时间:2012-03-06 23:57:09

标签: makefile sweave

我正在尝试使用makefile编译Sweave文档,使用存储在另一个目录中的数据,由当前目录中的脚本汇编。工作流程如下:

  

datamaker.R> / otherdirectory / data> .rnw> .tex> .PDF

我目前有一个类似于下面创建的makefile:

MASTER = foo.pdf
VPATH = /otherdirectory
all: $(MASTER)
    open $<

data: datamaker.R
    R CMD BATCH 'datamaker.R'

foo.rnw: data

foo.tex: foo.rnw
    R CMD SWEAVE 'foo.rnw'

foo.pdf: foo.tex
    pdflatex foo.tex

问题是R CMD BATCH命令每次都会运行,即使'datamaker'比'data'旧。我确信我错过了一些相当明显的东西,但我现在已经把头发拉了几个小时了。

1 个答案:

答案 0 :(得分:0)

Make正在尝试使用data规则构建data,这是foo.rnw的先决条件,但data规则实际上并未构建data它构建otherdirectory/data。所以Make每次都会运行它,因为data永远不存在。

试试这个:

...

otherdirectory/data: datamaker.R
    R CMD BATCH 'datamaker.R'

foo.rnw: otherdirectory/data

...