2016-08-30 20 views
1

私は、相互接続されたtexファイルからなる講義を持っています。 lecture.texは、/pictures/outputフォルダにpdf形式の画像を使用しています。それらはtexのファイルから/picturesというフォルダに作成されています。メイクファイル:ネストされた依存関係

lecture.tex 
makefile 
/pictures 
    /output 
    01_picture.pdf 
    02_picture.pdf 
    01_picture.tex 
    02_picture.tex 
    makefile 

私は(それが正常に動作します)画像のためのメイクファイルを作成しました:講義をコンパイルするとき

COMMAND = pdflatex 
FLAGS = #-quiet 
FILES = $(wildcard ./[0-9]*.tex) 
.PHONY = all create_dir 
OUTPUTDIR="output" 

all: create_dir $(patsubst ./%.tex,./output/%.pdf,$(FILES)) 

create_dir: 
    @if [ ! -d $(OUTPUTDIR) ]; then \ 
     mkdir $(OUTPUTDIR); \ 
    fi 

./output/%.pdf: %.tex 
    $(COMMAND) $(FLAGS) $*.tex 
    mv ./$*.pdf ./output 
    rm ./$*.aux ./$*.log 

は今、私たちは何をする必要があります。

if(any pictures tex files were modified) 
    recompile picture pdf 
    recompile lecture.tex 

私はこれでそれを実行しようとしましたメインメークファイル:

COMMAND = pdflatex 
FLAGS = #-quiet 
.PHONY = pictures 

all: lecture.pdf 

lecture.pdf: pictures lecture.tex 
    $(COMMAND) $(FLAGS) lecture.tex 

pictures: 
    make -C pictures 

しかし、それは動作しません。あるいは、私はすべてのメイクファイルが1つだけ必要ですか?

答えて

2

ただ1つのメイクファイルを使用して、正しく依存関係を表現する:

pictures := pictures 
output := $(pictures)/output 

PDFLATEX  := pdflatex 
PDFLATEXFLAGS := #-quiet 
COMPILE.pdf := $(PDFLATEX) $(PDFLATEXFLAGS) 

pictures_tex := $(wildcard $(pictures)/[0-9]*.tex) 
pictures_pdf := $(pictures_tex:$(pictures)/%.tex=$(output)/%.pdf) 

lecture.pdf: lecture.tex $(pictures_pdf) 
    $(COMPILE.pdf) $< 

$(output)/%.pdf: $(pictures)/%.tex | $(output) 
    $(COMPILE.pdf) -output-directory $| $< 
    $(RM) $(output)/$*.aux $(output)/$*.log 

$(output): ; mkdir -p [email protected] 
+0

それはそれは写真フォルダ内のファイルを使用しなければならないことを確認伝えることは可能ですか?私はあなたのmakefileにそれを見ません。 – user4035

+0

@ user4035が修正されました。 – user657267

+0

'pictures'フォルダにある内部ファイルを使用する写真がいくつかあります。私は 'cd pictures && $(COMPILE.pdf)-output-directory $(OUTPUT)$ <'を試みましたが、 'pictures/01_picture.tex not found'というエラーが表示されます。あるいは、あなたの答えを受け入れ、これを別の質問として書いてください。 – user4035

関連する問題