我正在尝试编辑一个控制pdf文件生成文本文件的make文件(Sphinx,如果您熟悉它)。它目前设置为每个文档有一个make文件(你有一个源目录和一个构建目录),但我想调整目录结构,并且只有一个全局makefile,当make时命令被称为'make latexpdf',为所有文档生成pdfs。
我相信这可以通过在定义变量时使用某种通配符系统来完成,但我遇到了麻烦。
目前它的设置如下:(我只包括了相关的行)
BUILDDIR = builddir
SOURCEDIR = sourcedir
$(SPHINXBUILD) some options $(SOURCEDIR) $(BUILDDIR)/latex
$(MAKE) -C $(BUILDDIR)/latex all-pdf
但是为了能够让它遍历源目录中的每个子目录,并让它构建到具有相同名称的子目录中,我想我可以做类似的事情:
EACHDIR = {"subdir 1","subdir 2"} #This is the line that I need help with.
#subdir refers to each document that I'm making
BUILDDIR = builddir/$(EACHDIR)
SOURCEDIR = sourcedir/$(EACHDIR)
$(SPHINXBUILD) some options $(SOURCEDIR) $(BUILDDIR)/latex
$(MAKE) -C $(BUILDDIR)/latex all-pdf
但这对我不起作用。任何指导都将不胜感激。
由于
答案 0 :(得分:1)
我会做这样的事情:
SUBDIRS = subdir1 subdir2
BUILDDIR = builddir
SOURCEDIR = sourcedir
# Define each subdir as a target
$(SUBDIRS):
$(SPHINXBUILD) $(SOURCEDIR)/$@ $(BUILDDIR)/$@/latex
$(MAKE) -C $(BUILDDIR)/$@/latex all-pdf
# However, these targets aren't real files, so declare them as phony
.PHONY: $(SUBDIRS)
此应该有效(尽管有拼写错误)。
但是,一般来说,你应该避免对Make进行递归调用(参见Recursive Make Considered Harmful)。基本上,它会阻止顶级Make跟踪整个依赖关系树,这可能导致次优构建过程和/或不一致的重建。