2012-03-06 13 views
2

別のディレクトリに格納されたデータを使用して、メイクファイルでSweaveドキュメントをコンパイルしようとしていますが、現在のディレクトリのスクリプトで組み立てられています。ワークフローは、このようなものになる:SweaveとのMakefileの依存関係

datamaker.R>/otherdirectory /データ> .rnw> .tex> .PDF

を私は現在、下記の創造に似たメイクファイルを持っています

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 

問題は、 'datamaker'が 'data'より古い場合でも、R CMD BATCHコマンドが毎回実行されることです。私はかなり明白な何かを欠いていると確信していますが、私は数時間の間、私の髪を引っ張ってきました。

+0

推測:

はこれを試してみてください 'R CMD BATCH'コマンドは実際に'/'otherdirectoryではなく、現在のディレクトリにある' data'を生成し、右のことですか? – Beta

+0

はい、そうです。 – gregmacfarlane

答えて

0

メイクはfoo.rnwの前提条件である、dataを構築するためにdataルールを使用しようとしているが、実際にdataを構築しませんdataルールは、それがotherdirectory/dataを構築します。だから、dataは決してそこにはないので、Makeは毎回実行します。

... 

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

foo.rnw: otherdirectory/data 

... 
+0

私はこれがVPATH変数を追加する目的だと思いました。とにかく、パスを明示的に呼び出しても問題は解決されません。 – gregmacfarlane

+0

タイムスタンプをチェックして、1) 'otherdirectory/data'が存在すること、2)それが' datamaker.R'より新しいこと、3)otherdirectory/data'ルールがまだ実行中であることを確認できますか?次のステップがかなり関わっているので、私は確信しています。 – Beta

+0

タイムスタンプは有効ですが、問題の別の方法を見つけました。しかし、もしあなたがそれを提供したいなら、次のステップを聞くことに興味があります。 – gregmacfarlane

関連する問題