我有一个包含许多乳胶文档的文件夹结构。我假设所有.tex
文件都可以构建,除非它们位于前缀为00-
的文件夹下:
./presentation/slide.tex → BUILD
./presentation/section/1-introduction.tex → BUILD
./presentation/00-assets/packages.tex → DONT BUILD
我的makefile非常简单:
CC := latexmk -pdf -pdflatex="pdflatex -interaction=nonstopmode" -use-make
all: makefile
@find -L . -not -path "*/.*" -not -path "*/00-*" -name "*.tex" -execdir $(MAKE) -f $(PWD)/makefile {} \;
%.tex:
$(CC) $@
不幸的是,它不起作用,因为我不知道如何指定产品是%.pdf
而%.tex
是输入文件。如果.pdf
文件不存在或者源文件自上次构建以来已被修改,我不知道如何指定必须构建源文件。
任何人都可以帮助我吗?
答案 0 :(得分:2)
latexmk 4.27a以后有一个output-directory
选项。
tex := latexmk -pdf -pdflatex="pdflatex -interaction=nonstopmode" -use-make
texfiles != find -L . -not -path "*/.*" -not -path "*/00-*" -name "*.tex"
.PHONY: all
all: $(texfiles:.tex=.pdf)
%.pdf: %.tex
$(tex) -output-directory $(@D) $<
如果您使用的是较旧版本的品牌,请使用$(shell ...)
代替!=
。
答案 1 :(得分:0)
我不确定你要做什么,但请考虑the second rule of Makefiles:
每个非.PHONY规则都必须使用其目标的确切名称更新文件。
嗯,这不是强制性的,不遵守这些规则是一个非常糟糕的主意,如果你不知道自己在做什么,就更是如此。如果我足够了解Latex,你的.tex文件不是构建输出,它是输入,因此它不应该是目标,而应该是目标的先决条件。
我建议您删除%.tex规则并将其替换为修改您的Makefile:
%.pdf: %.tex
$(CC) $^
现在我不确定Latex的PDF生成是如何工作的,但是有了这个,你将为所有给出的.tex文件生成一个pdf文件。您只需在all
目标的先决条件中指定所有.tex文件即可。