Variables makefile中的变量
我正在尝试编辑一个make文件,该文件控制从文本文件(Sphinx,如果您熟悉的话)生成pdf文件。它当前设置为每个文档有一个make文件(其中有一个源目录和一个构建目录),但我想调整目录结构,并且只有一个全局makefile,当make命令被称为“make latexpdf”时,将为所有文档生成PDF 我相信在定义变量时使用某种通配符系统可以做到这一点,但我在这方面遇到了麻烦 目前它是这样设置的:(我只包括了相关的行) 但为了能够让它遍历源目录中的每个子目录,并让它以相同的名称构建到子目录中,我想我可以做如下操作:Variables makefile中的变量,variables,makefile,sphinx,Variables,Makefile,Sphinx,我正在尝试编辑一个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”当作文档时,会抛出一个错误,从而终止生成过程。这目前还可以,但当我添加更多内容时,这将是一个问题,因此这不是最后需要运行的内容。谢谢