我有许多乳胶文件,我希望能够方便地编译它们。我的makefile目前如下。
targets := $(patsubst %.tex, %.pdf, $(wildcard *.tex))
.PHONY: all
all: $(targets)
.SECONDEXPANSION:
%.pdf: %.tex $$(wildcard $$*_inc/*.*)
pdflatex $<
这样,如果存在包含文件夹,则该文件夹中的所有内容都将被视为依赖项。
但是,我还想自动运行相关的 python 脚本。这些可能是绘图的创建或要包含的值的计算。我试图进行以下修改。
targets := $(patsubst %.tex, %.pdf, $(wildcard *.tex))
all: $(targets)
.PHONY: all run_%
.SECONDEXPANSION:
%.pdf: %.tex $$(wildcard $$*_inc/*.*) $$(patsubst %, run_%, $$(wildcard $$*_inc/*.py))
pdflatex $<
run_%: %
$<
但是,这并不像我期望的那样工作。我有以下文件夹结构。
|
|-Makefile
|-paper.tex
|-paper_inc/
|---a.txt
|---b.py
我希望它能够运行b.py
,然后运行pdflatex paper.tex
。但是,b.py
是不运行的。如果我查看创建的依赖项,我会看到paper_inc/a.txt
并且paper_inc/b.py
是 的依赖项paper.pdf
,但run_paper_inc/b.py
不是。
我不完全确定这是什么问题,因为它觉得它应该起作用。此外,我还为%.pdf
规则尝试了以下几行。
%.pdf: %.tex $$(wildcard $$*_inc/*.*) $$(addprefix run_,$$(wildcard $$*_inc/*.py))
%.pdf: %.tex $$(wildcard $$*_inc/*.*) $$(shell ls $$*_inc/*.py | sed 's/^/run/')
%.pdf: %.tex $$(wildcard $$*_inc/*.*) $$(shell ls $$*_inc/*.py | awk '{print "prefix "$0}')
但是,对于这些规则中的每一个,我都会收到错误消息make: *** No rule to make target 'paper.pdf'. Stop.
应该做些什么来解决这个错误,或者,我应该用什么来代替make
?