2011-01-09 11 views
0

help_pages/ディレクトリにテキストファイルがたくさんあります。これらはすべてreSTでフォーマットされています。吐くアプリを通じて「.rst」makeを使ってreSTファイルを翻訳する

  1. 実行拡張子を持つhelp_pagesディレクトリ(およびサブディレクトリ)内の各ファイル:私はMakefileルールのカップルを作る私のGNUに追加しようとしています有効なhtmlファイル(今はちょうどrst2htmlを使用しています)。
  2. これらの出力htmlファイルをターゲットディレクトリにコピーし、help_pagesディレクトリに存在するディレクトリ構造を再現します。

ので、例えば、help_pages/some/dir/foo.rstは最初help_pages/some/dir/foo.htmlに翻訳さになるだろうし、その後public/help/some/dir/foo.htmlにコピー。

私は一日中Makefileのintracaciesを勉強しようとしましたが、結局私はあきらめました。 .rstファイルは、.htmlファイルをするために変換されますが、私は最終的に、ターゲットディレクトリにそれらをインストールする方法が分からない -

# Directory that the .rst files reside in: 
HELP_DIR=help_pages 
# use 'find' to locate all such files: 
HELP_SRCS=$(shell find $(HELP_DIR) -name "*.rst") 
# work out what path the intermediate files would be 
HELP_TARGETS=$(HELP_SRCS:.rst=.html) 

# do the translation. 
$(HELP_TARGETS): %.html: %.rst 
     rst2html $< [email protected] 

help: $(HELP_TARGETS) 

.phony: 
     help 

この種-の作品:ここでは、私がすでに持っているものです。メインビルドレシピにcpコマンドを追加すると、ファイルはターゲットディレクトリに存在しない場合には再インストールされません。

理想的には、ヘルプファイルを作成するターゲットと、インストールするターゲットと、これらの2つに依存する3番目のもの(「ヘルプ」と呼ばれる)が必要です。私はこれが私に最高の柔軟性を与えると思う。

誰も私にこれを達成するためのヒントを教えてもらえますか?

乾杯、

答えて

2

"私は一日中、Makefileの内部を勉強しようとしましたが、結局私はあきらめました。"あなたはどれくらい面白いか分かりません。

これはそれを行う必要があります。

HELP_DIR=help_pages 
# use 'find' to locate all such files: 
HELP_SRCS=$(shell find $(HELP_DIR) -name "*.rst") 
# work out what path the intermediate files would be 
HELP_TARGETS=$(HELP_SRCS:.rst=.html) 
# and the destinations 
HELP_INSTALL = $(patsubst help_pages%,public%,$(HELP_TARGETS)) 

# do the translation. 
$(HELP_TARGETS): %.html: %.rst 
    rst2html $< [email protected]   

# do the installation 
$(HELP_INSTALL):public/%:help_pages/% 
    cp $< [email protected] 

.PHONY: help install 

help: $(HELP_TARGETS) 

install:$(HELP_INSTALL) 

を今、あなたはすべてを行うにしたい場合は、単にmake installを。または、public/にコピーせずにhtmlファイルを作成する場合は、ちょうどmake helpです。依存関係が正しく機能することがわかります。

1

makeは異なるディレクトリ間のことを行うルールを記述するために王室の痛みになり、ディレクトリの区切り文字とパス名の「スマート」治療を持っています。

回避策の1つは、変換の副作用としてコピーを行うことです。 2番目のコマンドとして何かこれを追加するとうまくいくかもしれない:

echo [email protected] | cpio -pdl public/html 

ところで、.PHONYは大文字です。

関連する問題