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

当通过ghc --make foo.hs编译一个haskell源文件ghc --make foo.hs GHC总是会留下除foo.exe之外的各种中间文件。 这些是foo.hifoo.hi

我经常最终不得不删除.hi和.o文件以避免混淆文件夹。

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

我经历了GHC文档,似乎没有自动删除临时文件的内置方法 – 毕竟,GHC需要这些中间文件来构build最终的可执行文件,并且它们的存在速度当GHC知道它不需要重新编译一个模块时,可以进行整体编译。

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

我平常的工作stream程是直接使用cabal而不是ghc。 这将outputdir选项设置到一个合适的构build文件夹中,并可以为您编译haddock文档。 所有你需要的是为你的项目定义.cabal文件,然后说cabal安装或cabal构build,而不是直接运行ghc。 既然你最终需要关注这个过程,如果你想分享你的工作,这是一个很好的做法,它也有助于pipe理包的依赖。

您可以将-hidir设置为/ dev / null,我想,将它们发送到那里。 另外,一般的-fno-code选项closures了大量的输出。 你可能只想使用Cabal。

原来,使用-hidir / -odir / -outputdir是不好的; / dev / null是一个文件,而不是一个目录。 请参阅http://www.haskell.org/pipermail/xmonad/2010-May/010182.html