Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么HSCOLOR二进制文件的存在/不存在会迫使重新编译QuickCheck库?_Haskell_Cabal_Cabal Install_Quickcheck - Fatal编程技术网

Haskell 为什么HSCOLOR二进制文件的存在/不存在会迫使重新编译QuickCheck库?

Haskell 为什么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,它不会重新编译,也就是说

假设我没有安装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,它不会重新编译,也就是说,我看不到行

[ 1 of 15] Compiling Test.QuickCheck.Random 
...
[15 of 15] Compiling Test.QuickCheck
但如果我安装了当前版本(1.20.3)并再次安装QuickCheck,QuickCheck将重新编译

如果出现以下情况,也会重新编译QuickCheck

  • 我安装HSCOLOR
  • 我安装QuickCheck
  • 我删除了HSCOLOR二进制和
  • 我安装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 changing
    cabal macros.h
    肯定会触发使用
    CPP
    启用的模块重新编译。我每天都会看到这一点(出于这个原因,我尽量减少
    CPP
    的使用。)但我不知道为什么cabal会配置所有的构建工具。可能有原因,但我不知道。