Makefile

一つのプロジェクトに関連するファイルは一つのディレクトリ(フォルダ)に入れておくのは常識だが,最終産物(PDFファイル)を生成するための処理手順を Makefile というファイル名のファイルに書き込んでおくとよい。例えば ronbun.pdf を ronbun.tex から生成するのであれば,Makefile に

ronbun.pdf: ronbun.tex
        platex ronbun.tex
        dvipdfmx ronbun.dvi

と書いておく。半角スペース8個に見えるところは,実際にはタブ1個を入れる(半角スペースでは機能しない)。こうしておいて,Makefile や ronbun.tex の入っているディレクトリにいるターミナルで

make

と打ち込むと,もし ronbun.pdf が存在しないか,あるいは存在しても ronbun.tex より古ければ,次の platex ronbun.tex および dvipdfmx ronbun.dvi という命令を実行する。

なお,ronbun.tex から zu1.pdf,zu2.pdf,zu3.pdf を読み込んでいるのであれば,それらのうち一つでも ronbun.pdf より新しければ再コンパイルが必要であるので,

all: ronbun.pdf

PDFS= zu1.pdf zu2.pdf zu3.pdf

ronbun.pdf: ronbun.tex $(PDFS)
        platex ronbun.tex
        dvipdfmx ronbun.dvi

のように書く。1行目はここでは特に必要ないが,ターゲットが ronbun.pdf であることが見やすくなる。

ところで,zu1.pdf,zu2.pdf,zu3.pdf がそれぞれ zu1.R,zu2.R,zu3.R から生成されたものであるなら,

all: ronbun.pdf

PDFS= zu1.pdf zu2.pdf zu3.pdf

ronbun.pdf: ronbun.tex $(PDFS)
        platex ronbun.tex
        dvipdfmx ronbun.dvi

.SUFFIXES: .pdf .R

.R.pdf:
	Rscript $<

のようにしておくと,例えば zu3.pdf が存在しないか zu3.R より古ければ,Rscript zu3.R というコマンドで生成してくれる。


Last modified: