2011-10-31 99 views
0

我正在为DocBook文档项目编写一个Makefile,并且我对更好的方式来管理我的目标感兴趣。在Makefile中管理多个配置

文档集有多种输出格式:

  • PDF
  • HTML
  • CHM
  • RTF

和多个配置涉及同一源文件:

  • 培训手册
  • 参考
  • 用户指南

那么我现在结束了,现在是目标像这样的一群:

ug-pdf: 
ug-html: 
ug-chm: 
ug-rtf: 
ref-pdf: 
ref-html: 
ref-chm: 
training-pdf: 
training-html: 
training-chm: 
<etc> 

你可以看到的东西怎么会一旦我们添加更多格式或配置,就会失控。有没有更好的方法来管理这个,或者这是我坚持的?

回答

0

你没有指定你的工具链,所以不清楚你是否需要对依赖于每种输出格式的源文件进行任何操作。假设不是,您将需要每个源文件的目标文件捕获您所做的任何更改,然后获取依赖于源文件目标的每种输出格式的目标。

Makefile的轮廓:

training: training-src.txt 

ref: reference-src.txt 

ug: guide-src.txt 

build-pdf: training ref ug 
    #Toolchain args here 

build-html: training ref ug 
    #Toolchain args here 
1

假设你已经初始化三种物质可以让变量与

Training_Manual_SOURCES = ... 

Reference_SOURCES = ... 

User_Guide_SOURCES = ... 

然后你描述的规则生成文件的源文件的列表(可能在你的情况文本文件?)每种输出格式:

$(DOCUMENT).pdf: $($(DOCUMENT)_SOURCES) 
    <PDF creation rules> -output [email protected] 

$(DOCUMENT).rtf: $($(DOCUMENT)_SOURCES) 
    <RTF creation rules> -output [email protected] 

<etc> 

然后你可以把每个文档的targ等,如果你需要有产生特定的一组文档的能力:

$(DOCUMENT): $(DOCUMENT).pdf $(DOCUMENT).rtf $(DOCUMENT).html 

最后,你可以拥有所有的目标,你必须引用所有文档名称:

all: Training_Manual Reference User_Guide 

然后你就可以调用使用

make DOCUMENT=Training_manual  

生成特定的文档。