Makefile:嵌套依赖项

时间:2016-08-30 10:39:48

标签: makefile

我有一个由互连的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

我为图片创建了一个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

我尝试使用这个主要的makefile:

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

all: lecture.pdf

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

pictures:
    make -C pictures

但它不起作用。或许,我只需要1个makefile就可以了吗?

1 个答案:

答案 0 :(得分:2)

只需使用一个makefile,并正确表达依赖关系:

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 $@
相关问题