Makefile中的变量

时间:2012-07-20 09:38:20

标签: variables makefile sphinx

我正在尝试编辑一个控制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    

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

由于

1 个答案:

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