Makefile 中的变量

标签 variables makefile sphinx

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

相关文章:

java - 如果变量没有数据尝试另一个?

variables - Rbx.Lua - 为什么我不能将 .txt 文件存储为表格?

c++ - 绕过 cin 语句的未初始化局部变量

shell - 为什么要使用 make 而不是 shell 脚本?

php - SphinxQL 按多个字段排序

ios - Swift 覆盖实例变量

linux - 具有相对路径的 Makefile?

makefile - 如何在 include 的子目录中安装 automake 安装头文件

mysql - 更新sphinx RT索引

php - sphinx 全文搜索与列过滤