我使用Shake创建mp3(这只是一个学习示例),我使用了la脚,然后使用id3v2对其进行了标记。
如果the脚成功,但id3v2失败了,那么我就剩下mp3文件了;但当然是“错误的”。我一直在寻找一个选项,如果产生命令错误,该选项会自动删除目标文件,但我什么也找不到。我可以通过检查退出代码并使用removeFiles来手动完成此操作,也可以在临时目录中进行构建并作为最后一步;但这似乎是一个足够普通的要求(make does this by default),所以我想知道是否有我只是看不到的功能或简单技术。
答案 0 :(得分:0)
Make缺省执行此操作的原因是,如果Make在磁盘上有部分不完整的文件,它将认为任务已成功运行并且是最新的,这会破坏所有内容。相反,Shake在单独的文件(.shake.database
)中记录了任务已成功运行,因此它知道您的mp3
文件不完整,并将在下次重新构建。
尽管Shake不需要删除文件,但您可能还是希望这样做,以避免混淆用户。您可以使用actionOnException
来做到这一点,例如:
let generateMp3 = do cmd "lame" ... ; cmd "id3v2" ...
let deleteMp3 = removeFile "foo.mp3"
actionOnException generateMp3 deleteMp3