2012-03-06 23 views
2

的Makefile依賴我嘗試編譯Sweave文檔有一個makefile,使用存儲在另一個目錄中的數據,通過一個腳本在當前目錄組裝。工作流程是這樣的:與Sweave

datamaker.R>/otherdirectory /數據> .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」大於「數據」舊。我確信我錯過了一些相當明顯的事情,但我現在已經把我的頭髮拉出了幾個小時。

+0

一個猜測:在的r CMD命令BATCH'實際上產生在'otherdirectory /''data',而不是在當前目錄中,是這樣嗎? – Beta 2012-03-07 00:36:18

+0

是的,這是正確的 – gregmacfarlane 2012-03-07 15:43:05

回答

0

提出的是試圖用data規則建立data,這是foo.rnw的先決條件,但data規則沒有真正建立data,它建立otherdirectory/data。所以Make每次都運行它,因爲data永遠不會存在。

試試這個:

... 

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

foo.rnw: otherdirectory/data 

... 
+0

我認爲這是添加VPATH變量的目的。無論如何,專門調用路徑並不能解決問題。 – gregmacfarlane 2012-03-07 19:24:32

+0

您可以檢查時間戳,並驗證1)'otherdirectory/data'是否存在,2)是否比'datamaker.R'更新,3)'otherdirectory/data'規則仍在執行?我想確定一下,因爲下一步是非常重要的。 – Beta 2012-03-07 19:33:41

+0

時間戳是有效的,但我發現另一種解決方法。但是,如果您想提供下一步,我會有興趣聽到下一步。 – gregmacfarlane 2012-03-09 17:00:50