我有一个构建单个可执行文件的项目。对于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的所有内容。