これは、私がhttps://github.com/ndmitchell/shake/issues/59で思いついたものです。おそらく、クローズされた問題よりも、stackoverflow で見つける方が簡単です。
私の Shake ルールが にあるとしましょうBuild.hs
。
Build.hs
私は自分自身のハッシュを次のように使用しますshakeVersion
:
{-# LANGUAGE TemplateHaskell #-}
import qualified Data.ByteString as BS
import Development.Shake.Classes (hashWithSalt)
import Language.Haskell.TH
-- | The name of this file we are in.
_THIS_FILE_NAME :: String
_THIS_FILE_NAME = $(LitE . StringL . loc_filename <$> location)
main = do
checksum <- dropWhile (== '-') . show . hashWithSalt 0 <$> BS.readFile _THIS_FILE_NAME
shakeArgs shakeOptions
{ shakeVersion = "hash-" ++ checksum ++ "-" ++ _THIS_FILE_NAME
} $ do ...
この方法では、Shake コードを変更するとバージョンが自動的に変更されるため、手動で変更することを心配する必要はありません。
更新:以下をもう少し簡単に実行できる機能getHashedShakeVersion
が追加されました。shake