我正在尝试编辑一个 make 文件,该文件控制以文本文件形式生成 pdf 文件(Sphinx,如果您熟悉它)。目前的设置是每个文档都有一个 make 文件(其中有一个源目录和一个构建目录),但我想调整目录结构,并且只有一个全局 makefile,当 make命令名为“make Latexpdf”,将为所有文档生成 pdf。
我相信这可以通过在定义变量时使用某种通配符系统来完成,但我在这方面遇到了麻烦。
目前它的设置如下:(我只包含了相关行)
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
但这对我来说不起作用。任何指导将不胜感激。
谢谢
最佳答案
我会做这样的事情:
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 跟踪整个依赖关系树,这可能导致构建过程次优和/或不一致的重建。
关于Makefile 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11576752/