Haskell 为什么HSCOLOR二进制文件的存在/不存在会迫使重新编译QuickCheck库?
假设我没有安装HSCOLOR程序,我安装了QuickCheckHaskell 为什么HSCOLOR二进制文件的存在/不存在会迫使重新编译QuickCheck库?,haskell,cabal,cabal-install,quickcheck,Haskell,Cabal,Cabal Install,Quickcheck,假设我没有安装HSCOLOR程序,我安装了QuickCheck $ cd /tmp/ $ cabal get QuickCheck $ cd QuickCheck $ cabal install ... [ 1 of 15] Compiling Test.QuickCheck.Random ... [15 of 15] Compiling Test.QuickCheck ... Installed QuickCheck-2.7.6 如果我再次安装QuickCheck,它不会重新编译,也就是说
$ cd /tmp/
$ cabal get QuickCheck
$ cd QuickCheck
$ cabal install
...
[ 1 of 15] Compiling Test.QuickCheck.Random
...
[15 of 15] Compiling Test.QuickCheck
...
Installed QuickCheck-2.7.6
如果我再次安装QuickCheck,它不会重新编译,也就是说,我看不到行
[ 1 of 15] Compiling Test.QuickCheck.Random
...
[15 of 15] Compiling Test.QuickCheck
但如果我安装了当前版本(1.20.3)并再次安装QuickCheck,QuickCheck将重新编译
如果出现以下情况,也会重新编译QuickCheck
我用GHC 7.8.3、Cabal 1.20.0.2和Cabal install 1.20.0.3以及Cabal和Cabal install的开发版本(使用)测试了这种行为。我不是专家,但我相信Cabal配置了他知道并能够找到的所有构建工具。构建时,cabal生成带有宏的
cabal_macros.h
文件,以测试构建工具版本。如果启用了CPP
扩展名,则文件将包含在所有位置,并且所有内容都将在cabal_macros.h
中的任何更改上重建。是否打开了库文档?否,我没有打开此选项。我可以在沙箱中使用“cabal安装--禁用文档”复制此行为。此外,我还可以使用普通的旧“runhaskell Setup.lhs configure--user&&runhaskell Setup.lhs”来复制这一点(因此启用/禁用文档并不是真的需要);我最好的猜测是,因为配置发生了变化,它希望重新构建所有内容。注意:您获得赏金是因为您似乎有一些线索,并且已经做出了努力,我不希望赏金被浪费。我不知道答案是否正确。一种测试方法是:获取cabal macros.h
文件,重新配置,区分新旧,看看用旧的替换新的是否仍然会导致重建。@ivanm changingcabal macros.h
肯定会触发使用CPP
启用的模块重新编译。我每天都会看到这一点(出于这个原因,我尽量减少CPP
的使用。)但我不知道为什么cabal会配置所有的构建工具。可能有原因,但我不知道。