如何强制 latexrun 并行构建?

如何强制 latexrun 并行构建?

我有一系列属于同一事物的独立文档,每个文档都有自己的主 tex 文件。我编写了一个小型 Makefile 来包装 latexrun。latexrun 非常棒,但如果我尝试并行构建所有 pdf(例如通过调用make -j),则单独的 latexrun 实例都会按顺序启动。我在 make 之外尝试了此操作:

for f in *.tex; do latexrun -Wall -O .build/ "$f" & true; done
#          this should make it run in parallel ---^

它们再次拒绝并行运行。这是为什么?我该如何解决这个问题?

答案1

检查构建目录后,似乎 latexrun 在运行时锁定了其数据库。因此,为每个文件提供自己的目录可以解决这个问题,因为每个 latexrun 实例都有其用于构建的每个文件的单独数据库。

这是 Makefile 的摘录

B:=.build
S:=$(wildcard *.tex)
T:=$(S:.tex=.pdf)

.PHONY: all
all: $T

$T: %.pdf: %.tex $(wildcard include/*)
    @mkdir -p '$B/$(patsubst %.tex,%,$<)/'
    @./.latexrun -Wall -O '$B/$(patsubst %.tex,%,$<)/' --color always '$<'
    @cp '$B/$(patsubst %.tex,%,$<)/$@' '$@'

这将在 .build/file1/file1.pdf 中构建 file1.tex,在 .build/file2/file2.pdf 中构建 file2.tex,然后将其复制到主目录。

在这种情况下,构建时间从 23.5 秒减少到 5.8 秒。

相关内容