来自 Duncan Coutts 的电子邮件:
问题:如何添加预处理器?我努力了
main =
defaultMainWithHooks
simpleUserHooks{hookedPreProcessors=[("foo",transformation)]}
transformation :: BuildInfo -> LocalBuildInfo -> PreProcessor
看起来是对的。以下是完成它的方法(示例取自 Cabal haddock 文档的 PreProcess 模块):
transformation _ _ =
PreProcessor {
platformIndependent = True,
runPreProcessor =
mkSimplePreProcessor $ \inFile outFile verbosity -> do
fail $ "transformation: " ++ inFile ++ " " ++ outFile
}
它工作正常:
runghc Setup.hs build
Preprocessing library foo-1.0...
Setup.hs: transformation: Abc.foo dist/build/Abc.hs
但是什么情况下会调用这个函数呢?到目前为止,
我还没有成功让 cabal 调用这个函数。
它会在查找模块时调用它Abc(即Abc.hs
或.lhs),如果没有找到它,它将检查预处理器列表并查找相应的文件,即Abc.foo.