LaTeXファイルをサブディレクトリにコンパイルするためにmakefileを作成しようとしています。希望するディレクトリ構造は、a、b、cの代わりにlatexフォルダの下にいくつでもサブディレクトリが存在することを除けば、このようになります。makefileサブディレクトリに変更されたlatexファイルをコンパイルします
├── latex
│ ├── a
│ │ ├── output
│ │ │ └── stuff.pdf
│ │ └── stuff.tex
│ ├── b
│ │ ├── blah.tex
│ │ └── output
│ │ └── blah.pdf
│ └── c
│ ├── asdf.tex
│ └── output
│ └── asdf.pdf
└── makefile
これは、すべてのサブディレクトリ内のtexファイルを自動的にコンパイルするlatexディレクトリ内の1つのメイクファイルで行います。 私の現在のメイクファイルは、次のようになります。
TEX_COMMAND = pdflatex
TEX_FILES = $(wildcard **/*.tex)
OUTPUT_DIRECTORIES = $(addsuffix output/,$(wildcard */))
PDF_FILES = $(join $(dir $(TEX_FILES)),$(addprefix output/,$(notdir $(TEX_FILES:tex=pdf))))
all: mkdir $(PDF_FILES)
mkdir:
@mkdir -p $(OUTPUT_DIRECTORIES)
$(PDF_FILES): $(TEX_FILES)
@$(TEX_COMMAND) -file-line-error -halt-on-error -output-directory $(dir [email protected]) -aux_directory=$(dir [email protected]) $(subst output/,$(notdir $(@:pdf=tex)),$(dir [email protected]))
@$(TEX_COMMAND) -file-line-error -halt-on-error -output-directory $(dir [email protected]) -aux_directory=$(dir [email protected]) $(subst output/,$(notdir $(@:pdf=tex)),$(dir [email protected]))
clean:
@rm -rf $(OUTPUT_DIRECTORIES)
これは正しくなど、各サブディレクトリ内のoutput
ディレクトリ内のファイルを適切pdf
、aux
、log
、toc
を生成します。しかし、1つのtexファイルを変更すると、makeはすべてのファイルを再コンパイルします。
私は既に他の多くの同様の質問を検討しています。他の質問については、サブディレクトリの数が分かっているので、それらをmakefileにハードコードすることができます。このような状況では、latexフォルダ内のサブディレクトリの数が常に変化していて、etcに追加されています。そのため、ワイルドカードを使ってすべてのtexファイルを取得しています。私は、サブディレクトリごとにメイクファイルを作成する必要はなく、再帰的なmakeを使用する方が好きです。
GNU Makeを使用すると、*自動的に*サブディレクトリごとのMakefileを作成し 'それをinclude'することができます。 'eval()'を使うこともできます。 – reinierpost