マークダウンから HTML を生成するために使用している Rakefile があります (そして、質問に関係のない他のことを行います。
ソースの .feature ファイル ( FileList 内DOCUMENTS
) から出力ディレクトリOUTPUT
に HTML としてファイルを生成しています。htmlfile
HTML ファイルを組み立てて記述する方法があります。
ここで 2 つの代替オプションを試しています。
ファイル タスク:
DOCUMENTS.each do |doc|
file doc.pathmap("#{OUTPUT}/%X.html") => doc do |t|
htmlfile t.name, RDiscount.new(F.read doc).to_html, t.name.pathmap('%n')
end
end
ルールを使用して合成されたファイル タスク:
rule '.html' => proc {|html| html.pathmap("%{#{OUTPUT}/,}X.feature")} do |t|
htmlfile t.name, RDiscount.new(F.read t.source).to_html, t.name.pathmap('%n')
end
私の理解では、後者のオプションはファイルタスクを合成し、同じ正味の効果があるということでした。ただし、それを選択すると、最初のオプションでは対応できるのに対し、インクリメンタル ビルドには対応できないことがわかりました。
ビルドして 1 つのファイルを変更し、rake --trace を実行すると、次のようになります。
合成タスクの場合:
** Invoke output/Module/Feature.html (first_time, not_needed)
** Invoke output/Module (not_needed)
また、明示的なファイル タスクを使用すると、次のようになります。
** Invoke output/Module/Feature.html (first_time)
** Invoke output/Module (not_needed)
** Invoke Module/Feature.feature (first_time, not_needed)
** Execute output/Module/Feature.html
このオプションは明らかにソース ファイルをチェックしています。出力とソースをリンクすることはまさにルールだと思いました