如何阻止GHC生成中间文件?

时间:2009-09-11 14:08:08

标签: haskell ghc

通过ghc --make foo.hs编译haskell源文件时,GHC总是留下除foo.exe以外的各种中间文件。这些是foo.hifoo.o

我经常最终要删除.hi和.o文件以避免文件夹混乱。

GHC是否有命令行选项不留下其中间文件? (当被问到#haskell时,我得到的最好答案是ghc --make foo.hs && rm foo.hi foo.o

5 个答案:

答案 0 :(得分:33)

我已经浏览了GHC文档,并且似乎没有自动删除临时文件的内置方法 - 毕竟,GHC需要这些中间文件来构建最终的可执行文件,并且当GHC知道它不必重新编译模块时,它们的存在加速了整体编译。

但是,您可能会发现setting the -outputdir option会帮助您;这会将所有目标文件(.o),接口文件(.hi)和FFI存根文件放在指定的目录中。它仍然“混乱”,但至少它不再在你的工作目录中了。

答案 1 :(得分:15)

我通常的工作流程是直接使用cabal而不是ghc。这会将outputdir选项设置为适当的构建文件夹,并且可以为您构建类似的haddock文档。您所需要的只是为您的项目定义.cabal文件,然后说cabal install或cabal build而不是直接运行ghc。如果你想分享你的hackage工作,最后你需要遵循这个过程,这是一个很好的做法,它也有助于管理包依赖。

答案 2 :(得分:8)

GHC now has the options no-keep-hi-filesno-keep-o-filesSee here以获得更多信息。

答案 3 :(得分:6)

我认为你可以将-hidir设置为/ dev / null,然后将它们发送到那里。此外,-fno-code选项通常会关闭大量输出。你可能只想使用Cabal。

答案 4 :(得分:3)

事实证明使用-hidir / -odir / -outputdir并不好; / dev / null是一个文件,而不是一个目录。见http://www.haskell.org/pipermail/xmonad/2010-May/010182.html