Makefile中的两级依赖项

时间:2015-08-31 06:15:55

标签: makefile gnu-make

我有一个简单的markdown文件构建过程:

  • " .MD"文件被编译成" .tex"文件( md - > tex 规则),
  • " .tex"文件被编译成" .pdf"文件( tex - > pdf 规则),
  • 和" main.pdf"是和应该显示的文件(显示规则)

作为make文件,我试试:

# md-->tex rule
%.tex: %.md 
    panzer  -o $@ $<

# tex-->pdf rule
%.pdf: %.tex 
    latexmk -g $<

# show rule
run: main.pdf
    showpdf $<

.PHONY: run

但是,一旦构建了PDF,对目录中任何md文件的更改都不会重建PDF。我想问题是最终目标规则运行不会产生任何效果。

如何以调用 tex - &gt; pdf 规则的方式编写此目标规则,然后再调用 md - &gt; tex 规则两个级别下来?

1 个答案:

答案 0 :(得分:0)

目前还不清楚您是否每个md文件构建一个pdf或pdf。如果您只修改了main.pdf,那么您的tex->pdf规则就不是您想要做的,因为有很多文件,而不仅仅是main.tex。您需要修改规则并指定main.pdf的依赖关系,或者自动生成它们,如下例所示:

all: main.pdf

main.pdf: $(patsubst %.md, %.tex, $(wildcard *.md))

#md-->tex rule
%.tex: %.md
    panzer  -o $@ $<

# tex-->pdf rule
%.pdf:
    latexmk -g $^

# show rule
run: main.pdf
    showpdf $<

clean:
    $(RM) *.tex main.pdf

.PHONY: run clean