我想創建一個makefile來編譯子目錄中的LaTeX文件。所需的目錄結構應該如下所示,除了簡單的a,b和c之外,在latex文件夾下可以有任意數量的子目錄。makefile編譯子目錄中更改的乳膠文件
├── latex
│ ├── a
│ │ ├── output
│ │ │ └── stuff.pdf
│ │ └── stuff.tex
│ ├── b
│ │ ├── blah.tex
│ │ └── output
│ │ └── blah.pdf
│ └── c
│ ├── asdf.tex
│ └── output
│ └── asdf.pdf
└── makefile
我想在latex目錄中只有一個makefile,它會自動編譯每個子目錄中的tex文件。 我現在的makefile文件看起來是這樣的:
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)
這將正確生成適當的pdf
,aux
,log
,toc
等在各個子目錄中output
目錄中的文件。但是,如果我更改了一個tex文件,那麼make會重新編譯所有的東西。
我已經看過很多其他類似的問題。對於其他問題,子目錄的數量是已知的,所以你可以將它們硬編碼到makefile中。對於這種情況,latex文件夾中的子目錄數量不斷變化並被添加到等等,這就是爲什麼我使用通配符來抓取所有tex文件的原因。我寧願不必爲每個子目錄創建一個makefile並使用遞歸make。
使用GNU製作,你可以在每個子目錄創建一個Makefile *自動*和'include'它。你也可以使用'eval()'。 – reinierpost