我对Shake用来确定是否需要重建输出的规则感到困惑。我有一个简单的文档构建,有两个步骤。下面是完整的构建文件,但总而言之,asciidoc
它用于将.txt
文件转换为.dbxml
(Docbook XML)文件,然后使用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