1

使用Shake创建一个 mp3(这只是一个学习示例),我使用 lame,然后使用 id3v2 对其进行标记。

如果 lame 成功,但 id3v2 失败,那么我只剩下 mp3 文件了;但当然这是“错误的”。如果产生命令错误,我正在寻找一个自动删除目标文件的选项,但我找不到任何东西。我可以通过检查退出代码并使用removeFiles手动执行此操作,或者通过在临时目录中构建并作为最后一步移动;但这似乎是一个足够普遍的要求(make 默认情况下会这样做),所以我想知道是否有我没有看到的功能或简单技术。

4

1 回答 1

0

Make 默认这样做的原因是,如果 Make 在磁盘上有部分不完整的文件,它会认为该任务已成功运行并且是最新的,这会破坏一切。相反,Shake 在单独的文件 ( .shake.database) 中记录任务成功运行,因此它知道您的mp3文件不完整,并会在下次重建它。

虽然 Shake 不需要您删除文件,但您可能仍希望这样做以避免混淆用户。您可以使用 来做到这一点actionOnException,例如:

let generateMp3 = do cmd "lame" ... ; cmd "id3v2" ...
let deleteMp3 = removeFile "foo.mp3"
actionOnException generateMp3 deleteMp3
于 2019-09-09T13:06:23.823 回答