ラテックスファイルがたくさんありますが、それらすべてを便利にコンパイルできるようにしたいと思います。私の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
ですか?