我有一个简单的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.tex
,e.tex
而进一步增加,甚至可能包含子文件夹f\section1.tex
,f\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}
pdf
依赖于章节及其子目录中的任何文件更改?open
取决于目标pdf
,我该如何编写它?答案 0 :(得分:0)
open: pdf
会为你的第二个问题做点什么。
虽然最好不要使用假的pdf
目标。
取而代之的是thesis.pdf:
目标,该目标取决于正确的先决条件,并且同时包含pdf: thesis.pdf
和open: 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
文件,否则可能不值得。