出力を再構築する必要があるかどうかを判断するためにShakeが使用するルールについて、私は混乱しています。2 つのステップでドキュメントを作成する簡単なビルドがあります。完全なビルド ファイルを以下に示しますが、要約すると、asciidoc
を使用して.txt
ファイルを.dbxml
(Docbook XML) ファイルに変換し、次に を使用して PDF に変換しdblatex
ます。
PDF に触れてシェイクを再実行しても、出力は両方の入力よりも新しいため、何も起こらないはずです。ただし、実際には、shake は dblatex ステップを実行します。
次に、.dbxml
ファイルに触れると、shake は dblatex を実行しますが、asciidoc は実行しないと予想します。これは、dbxml がその入力 (つまり.txt
) よりも新しいためです。ただし、shake は実際には asciidoc と dblatex の両方のステップを実行します。
依存関係を間違えましたか?
import Development.Shake
import Development.Shake.FilePath
-- List of output files
outputs = ["process.pdf"]
main = shakeArgs shakeOptions{shakeVerbosity=Diagnostic} $ do
want outputs
-- Rule to produce pdf files from dbxml inputs
"*.pdf" *> \out -> do
let dbxml = out `replaceExtension` "dbxml"
need [dbxml]
cmd "dblatex" "-o" out dbxml
-- Rule to produce dbxml files from txt (asciidoc) inputs
"*.dbxml" *> \out -> do
let src = out `replaceExtension` "txt"
need [src]
cmd "asciidoc" "--backend=docbook45" "--doctype=article" "-o" out src