我有一系列属于同一事物的独立文档,每个文档都有自己的主 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 秒。