3

我正在使用 Makefile 来处理构建 LaTeX 文档。我有两个目录./tikz./feyn其中包含.tex文件和 Makefile 来编译它们。他们生成的数字,然后我将其包含在主文档中。我正在使用以下 Makefile 来编译主文档:

.PHONY : tikz feyn

main.pdf : main.tex feyn tikz
    pdflatex main.tex

tikz :
    $(MAKE) -C tikz

feyn :
    $(MAKE) -C feyn

问题是,即使main.pdf是最新的,运行仍然make会执行其规则,因为虚假目标永远不会是最新的。但是,如果我不声明tikz并且feyn是假的,他们的规则将不会被执行。我怎样才能解决这个问题?

4

2 回答 2

1

这取决于您想在目录feyntikz. 我猜tikz你想生成一些PDF。只需使用实际文件作为依赖项。例如,

main.pdf : main.tex feyn tikz
    pdflatex main.tex

tikz : tikz/somefile.pdf

tikz/somefile.pdf:
    $(MAKE) -C tikz

# etc.

另一种方法是main.pdf使用订单目标与您的虚假目标分离:

.PHONY : tikz feyn

main.pdf : main.tex | feyn tikz
   pdflatex main.tex

tikz :
   $(MAKE) -C tikz

feyn :
   $(MAKE) -C feyn 

all: feyn tikz main.pdf
于 2013-05-16T11:11:38.600 回答
0

不要在子目录中运行 pdflatex。而是在这些目录中运行 latexmk 。对 latexmk 的调用总是会发生(因为目标是假的),但是如果不需要对子目录做任何事情,latexmk 就会放弃。

然后也可能将 latexmk 用于顶级目标。

于 2013-05-17T07:53:19.273 回答