多くの HTML ファイルの生成を既存の .xml ファイルに統合する必要がありますMakefile
。問題は、HTML ファイルが多くの異なるディレクトリに存在する必要があることです。私の考えは、ソース ファイル (*.st) を対応する html ファイルに変換する暗黙のルールを作成することです。
%.html: %.st
$(HPC) -o $@ $<
およびすべての html ファイルに依存するルール
all: $(html)
HTML ファイルが builddir にない場合、makeは暗黙のルールを検出しません: *** No rule to make target
. 暗黙のルールをそのように変更すると
$(rootdir)/build/doc/2009/06/01/%.html: %.st
$(HPC) -o $@ $<
見つかりましたが、プロジェクト内のほぼすべてのファイルに対して暗黙のルールを設定する必要があります。GNUマニュアルのImplicit Rule Search Algorithmによると、ルール検索は次のように機能します。make
- ターゲット名t全体をdと呼ばれるディレクトリ部分とnと呼ばれる残りの部分に分割します。たとえば、tが
src/foo.o
の場合、dはsrc/
であり、nはfoo.o
です。- ターゲットの 1 つがtまたはnに一致するすべてのパターン ルールのリストを作成します。ターゲット パターンにスラッシュが含まれている場合は、 tと照合されます。それ以外の場合は、n に対して。
暗黙のルールが見つからないのはなぜですか? また、GNUmake
が使用されていると仮定すると、最も洗練されたソリューションは何でしょうか?
これは my の簡略版ですMakefile
:
rootdir = /home/user/project/doc
HPC = /usr/local/bin/hpc
html = $(rootdir)/build/doc/2009/06/01/some.html
%.html: %.st
$(HPC) -o $@ $<
#This works, but requires a rule for every output dir
#$(rootdir)/build/doc/2009/06/01/%.html: %.st
# $(HPC) -o $@ $<
.PHONY: all
all: $(html)