3

出力を再構築する必要があるかどうかを判断するために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
4

1 に答える 1