2011-10-31 67 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  

生成特定的文檔。