Variables makefile中的变量

Variables makefile中的变量,variables,makefile,sphinx,Variables,Makefile,Sphinx,我正在尝试编辑一个make文件,该文件控制从文本文件(Sphinx,如果您熟悉的话)生成pdf文件。它当前设置为每个文档有一个make文件(其中有一个源目录和一个构建目录),但我想调整目录结构,并且只有一个全局makefile,当make命令被称为“make latexpdf”时,将为所有文档生成PDF 我相信在定义变量时使用某种通配符系统可以做到这一点,但我在这方面遇到了麻烦 目前它是这样设置的:(我只包括了相关的行) 但为了能够让它遍历源目录中的每个子目录,并让它以相同的名称构建到子目录中,

我正在尝试编辑一个make文件,该文件控制从文本文件(Sphinx,如果您熟悉的话)生成pdf文件。它当前设置为每个文档有一个make文件(其中有一个源目录和一个构建目录),但我想调整目录结构,并且只有一个全局makefile,当make命令被称为“make latexpdf”时,将为所有文档生成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跟踪整个依赖关系树,这可能导致次优构建过程和/或不一致的重建。

我会这样做:

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

谢谢!您是否介意演示如何使用
makeall
使我不必为每个文档键入每个
makesubdir1
等命令?是的,您只需要在
all:
内部嵌套
all:
?@user1488804:是的,您只需要
all:$(SUBDIRS)
,还有
。假:all
。谢谢。我在使用多个目录时仍然有困难,但我怀疑这些是sphinx在不同文件中的抱怨。希望我能解决这些问题,不再有太多麻烦。使用
all:$(SUBDIRS)
命令只会出现一个小问题。然后,当我运行
make all
时,它会使每个文档都成为
SUBDIRS
变量下列出的文档,但出于某种原因,它会在构建目录中创建一个名为
all
的额外子目录,并尝试为此运行构建。有没有办法防止这种情况?我不介意这么多,但是在(makefile内)之后运行
rm
命令不起作用,留下这个恶意目录。编辑:我已经使
rm
命令起作用,这样我的目录在make过程后看起来很整洁,但真正的问题是,当它试图将“all”当作文档时,会抛出一个错误,从而终止生成过程。这目前还可以,但当我添加更多内容时,这将是一个问题,因此这不是最后需要运行的内容。谢谢,谢谢!您是否介意演示如何使用
makeall
使我不必为每个文档键入每个
makesubdir1
等命令?是的,您只需要在
all:
内部嵌套
all:
?@user1488804:是的,您只需要
all:$(SUBDIRS)
,还有
。假:all
。谢谢。我在使用多个目录时仍然有困难,但我怀疑这些是sphinx在不同文件中的抱怨。希望我能解决这些问题,不再有太多麻烦。使用
all:$(SUBDIRS)
命令只会出现一个小问题。然后,当我运行
make all
时,它会使每个文档都成为
SUBDIRS
变量下列出的文档,但出于某种原因,它会在构建目录中创建一个名为
all
的额外子目录,并尝试为此运行构建。有没有办法防止这种情况?我不介意这么多,但是在(makefile内)之后运行
rm
命令不起作用,留下这个恶意目录。编辑:我已经使
rm
命令起作用,这样我的目录在make过程后看起来很整洁,但真正的问题是,当它试图将“all”当作文档时,会抛出一个错误,从而终止生成过程。这目前还可以,但当我添加更多内容时,这将是一个问题,因此这不是最后需要运行的内容。谢谢