Зависимости Makefile с помощью Sweave - PullRequest
2 голосов
/ 07 марта 2012

Я пытаюсь скомпилировать документ Sweave с помощью make-файла, используя данные, хранящиеся в другом каталоге, собранные скриптом в текущем каталоге.Рабочий процесс выглядит примерно так:

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

В настоящее время у меня есть make-файл, похожий насоздание ниже:

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 голосов
/ 07 марта 2012

Make пытается использовать правило data для сборки data, что является обязательным условием foo.rnw, но на самом деле правило data не создает data, оно создает otherdirectory/data. Так что Make запускает его каждый раз, потому что data никогда не существует.

Попробуйте это:

...

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

foo.rnw: otherdirectory/data

...
...