如何定义依赖于输入的某些修改的Shake规则

时间:2014-10-15 22:41:14

标签: haskell shake-build-system

使用Shake,我想定义一个依赖于一堆可执行文件的规则(例如exedll等)。但是,在使用它们之前,需要对它们进行数字签名。自签署"实际上并没有生成新文件,我怎样才能确保我的规则仅仅取决于 之后的文件?

修改:消除歧义。我的规则生成了一些这些文件,但不是全部。有些是第三方,是我们存储库的一部分。所以我需要在签名之后依赖那些静态文件

1 个答案:

答案 0 :(得分:1)

一种简单的方法是让签名步骤先进行复制,所以:

"signed//*" *> \out -> do
    copyFile ("unsigned" </> dropDirectory1 out) out
    cmd "signer" out

另一种方法是在签名时生成一个文件,用作提醒文件已签名的文件:

"programs//*.key" *> \out -> do
    writeFile' out ""
    cmd "signer" $ dropExtension out

第二种表述是不鼓励的,因为一般规则不应该修改其他规则产生的值 - 很容易过度重建(我想你可能会在这里)。

如果您有额外的文件,对于您生成的exes,只需一步生成并签名 - 如果您生成文件然后编辑其属性(Windows上为editbin),这是一种相当常见的模式。对于你没有生成的文件,你可以在签入它们之前签名,但是修改repo中的源文件(这是第三方的东西看起来像)可能是一个坏主意,所以副本可能更好。