1

我正在尝试编辑一个控制生成pdf文件形式文本文件的make文件(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    

不过,这对我不起作用。任何指导将不胜感激。

谢谢

4

1 回答 1

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 跟踪整个依赖关系树,这可能导致构建过程次优和/或重建不一致。

于 2012-07-20T10:15:06.793 回答