我对Shake用于确定是否需要重建输出的规则感到困惑。我有一个简单的文档构建,有两个步骤。完整的构建文件如下所示,但总结一下,asciidoc
用于将.txt
文件转换为.dbxml
(Docbook XML)文件,然后使用{{1}将其转换为PDF }。
我希望如果我触摸PDF并重新运行抖动,则不会发生任何事情,因为输出比两个输入都要新。但是,实际上,shake会执行dblatex步骤。
接下来,我希望如果我触摸dblatex
文件,那么shake将执行dblatex但不执行asciidoc,因为dbxml比其输入更新(即.dbxml
)。然而,实际上震动同时执行asciidoc和dblatex步骤。
我在依赖项中犯了错误吗?
.txt
答案 0 :(得分:4)
在Shake中,如果文件的上次修改时间从构建时更改,则该文件被视为脏。在make中,如果文件的上次修改时间较早而不是其依赖项,则该文件被视为脏。我怀疑你的观察结果都源于这种差异。要直接回答这个问题,Shake会在文件或其任何直接依赖项发生更改时重建文件。
为什么Shake会做出与众不同的事情?原因有三:
至于你的构建系统,这对我来说都很好看。我唯一的小调整是使用中缀运算符-<.>
而不是replaceExtension
- 它们都是相同的函数,但操作符看起来更清晰。