我有以下目录结构:
superfolder
makefile
subfolder1
file.tex
subfolder2
file.tex
...
subfolderN
file.tex
这是我目前的superfolder/makefile
:
file.pdf : file.tex
pdftex file.tex
如果我当前的工作目录是superfolder/subfolder1
我可以使用superfolder/subfolder1/file.pdf
创建make --file ../makefile
。
假设我当前的工作目录是superfolder
。如何编辑我的makefile,make all
会在每个子文件夹中创建file.pdf
?
(即创建subfolder1/file.pdf
,subfolder2/file.pdf
,...,subfolderN/file.pdf
)
如果它使事情变得更容易,您可以假设每个子文件夹总是包含file.tex
。
答案 0 :(得分:2)
试试这个:
OUTPUTS := subfolder1/file.pdf
OUTPUTS += subfolder2/file.pdf
OUTPUTS += ...
OUTPUTS += subfolderN/file.pdf
all: $(OUTPUTS)
$(OUTPUTS): %.pdf: %.tex
(cd $(dir $<) && pdftex $(notdir $<))
.PHONY: all
这样您就可以管理由make
构建的文件。并且,由于它使用的是真实文件目标(而不是虚假目标),make
将只重建所需的文件。
因此,您应该能够在make
目录中执行make all
(或superfolder
)来构建所有文件。如果您只想构建一个file
,请执行以下操作:
make subfolderN/file
如果您在subfolder
目录中,则可以通过以下方式重建所需文件:
make --file ../Makefile
或者仅重建 目录中的文件:
make --file ../Makefile $(basename $(pwd))/file
编辑:要自动执行此过程,您可以将第一行替换为:
OUTPUTS := $(patsubst %.tex,%.pdf,$(wildcard */file.tex))