如何让makefile依赖于文件夹中的任何文件

时间:2014-11-10 20:46:45

标签: makefile latex

我有一个简单的makefile,我用它来构建一些乳胶文件。语法如下所示:

pdf: thesis.tex chapters/a.tex chapters/b.tex chapters/c.tex
    latexmk -pdf -pdflatex="pdflatex thesis.tex

open:
    open thesis.pdf

chapters文件夹中的文件可能会因d.texe.tex而进一步增加,甚至可能包含子文件夹f\section1.texf\section2.tex等。

我手动将thesis.tex内所有需要的tex文件添加到这里,这不是问题。

\input{chapters/a.tex}
\input{chapters/b.tex}
\input{chapters/c.tex}
\input{chapters/d.tex}
\input{chapters/e.tex}
  1. 如何让make target pdf依赖于章节及其子目录中的任何文件更改?
  2. 如何在makefile中编写任务间依赖关系。如果目标open取决于目标pdf,我该如何编写它?

1 个答案:

答案 0 :(得分:0)

open: pdf会为你的第二个问题做点什么。

虽然最好不要使用假的pdf目标。

取而代之的是thesis.pdf:目标,该目标取决于正确的先决条件,并且同时包含pdf: thesis.pdfopen: thesis.pdf个目标。

对于第一个问题,你可以使用类似的东西:

SRCS := $(shell find chapters -name '*.tex')

或使用from here

rwildcard=$(strip $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)))

SRCS := $(call rwildcard,chapters,*.tex)

然后:

thesis.pdf: thesis.tex $(SRCS)

将该变量用作先决条件。

如果你想变得更加漂亮,你可以编写一个脚本来从\input{}中的thesis.tex指令中提取实际文件名,并将其用作SRCS变量(但是&# 39;除非你知道你会有其他无关的.tex文件,否则可能不值得。