为什么`-fforce-recomp`使ghc 7.8.2编译两次?

时间:2014-05-10 11:43:09

标签: haskell ghc cabal

我有一个构建单个可执行文件的项目。对于cabal,如果我使用-fforce-recomp这样的标志:

cabal build --ghc-options="-Wall -fforce-recomp"

GHC编译每个模块(我项目中的所有24个模块)两次。我得到的任何错误和警告都是第二次完全相同。即使没有发生错误,它仍然会编译两次。这是一个错误吗?

编辑:如果我绕过cabal并在我的源目录中手动调用ghc -Wall -fforce-recomp --make $PROJECT_NAME,我不会得到这种行为。因此,它可能与沙箱中的cabal build有关。另外,我注意到在重复的编译运行之间,只有最后一个以消息“Linking dist / build / ...”结束 - 即,它编译,再次编译,然后链接。

EDIT2:好的,所以我已经搜索了我的项目目录,我认为这绝对是一个cabal sandbox问题。我在*.hi中的所有模块和./dist/dist-sandbox-c40738d9/build/maxa/maxa-tmp/中的再次获取./dist/build/maxa/maxa-tmp/个文件。我有一种强烈的感觉,这些是两次编辑运行的足迹。

EDIT3:嗯,我刚刚意识到这两个编译运行都发生在./dist/build/maxa/maxa-tmp/ ---它就是这样说的:

[14 of 24] Compiling Maxa.State       ( src/Maxa/State.lhs, dist/build/maxa/maxa-tmp/Maxa/State.o )

(我想知道在编写EDIT2之前我是如何错过的...)。因此它与cabal sanbox hashcode目录无关。

EDIT4:嗯,github上有一个项目也用-fforce-recomp编译两次---你可以查看.cabal文件和https://github.com/listx/netherworld的所有内容。

0 个答案:

没有答案