0

ディレクトリに多数のテキスト ファイルがありhelp_pages/、すべて reST でフォーマットされています。私はGNUにMakefileいくつかのルールを追加しようとしています:

  1. 有効なhtmlファイルを吐き出すアプリを介して、拡張子「.rst」のディレクトリ(およびサブディレクトリ)内の各ファイルを実行しhelp_pagesます(現在、私はrst2html.
  2. これらの出力 html ファイルをターゲット ディレクトリにコピーし、ディレクトリに存在していたディレクトリ構造を再現しhelp_pagesます。

したがって、たとえば、help_pages/some/dir/foo.rst最初に に変換されhelp_pages/some/dir/foo.html、次に にコピーされpublic/help/some/dir/foo.htmlます。

Makefile のイントラキャシーを学ぼうと一日中過ごしましたが、結局諦めました。これが私がすでに持っているものです:

# 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 $< $@

help: $(HELP_TARGETS) 

.phony:
        help

この種の作品 - .rst ファイルは .html ファイルに変換されますが、それらを最終的なターゲット ディレクトリにインストールする方法がわかりません。メインのビルド レシピにコマンドを追加するcpと、ターゲット ディレクトリにファイルが存在しない場合、ファイルは再インストールされません。

理想的には、ヘルプ ファイルを作成するターゲット、それらをインストールするターゲット、およびこれら 2 つに依存する 3 つ目のターゲット (「ヘルプ」と呼ばれる) が必要です。これにより、最大の柔軟性が得られると思います。

これを達成する方法について誰かが私にいくつかのヒントを教えてもらえますか?

乾杯、

4

2 に答える 2

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 $< $@          

# do the installation
$(HELP_INSTALL):public/%:help_pages/%
    cp $< $@

.PHONY: help install

help: $(HELP_TARGETS)

install:$(HELP_INSTALL)

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

于 2011-01-10T19:41:11.270 に答える
1

makeディレクトリセパレーターを使用したパス名の「スマートな」処理があり、異なるディレクトリ間で処理を行うルールを作成するのは非常に面倒です。

1 つの回避策は、変換の副作用としてコピーを行うことです。たとえば、次のコマンドを 2 番目のコマンドとして追加するとうまくいく場合があります。

echo $@ | cpio -pdl public/html

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

于 2011-01-10T11:19:07.703 に答える