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

asr*_*asr 13 haskell quickcheck cabal cabal-install

假设我没有安装HsColour程序,我安装了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
Run Code Online (Sandbox Code Playgroud)

如果我再次安装QuickCheck,则不会重新编译,也就是说,我没有看到这些行

[ 1 of 15] Compiling Test.QuickCheck.Random 
...
[15 of 15] Compiling Test.QuickCheck
Run Code Online (Sandbox Code Playgroud)

但如果我安装HsColour当前版本(1.20.3)并再次安装QuickCheck,则会重新编译QuickCheck.

如果,QuickCheck也会重新编译

  1. 我安装了HsColour,
  2. 我安装了QuickCheck,
  3. 我删除了HsColour二进制文件和
  4. 我安装了QuickCheck.

我用GHC 7.8.3,Cabal 1.20.0.2和cabal-install 1.20.0.3测试了这种行为,以及Cabal和cabal-install的开发版本(使用https://github.com/haskell/cabal/commit/5ef7d84bb25cc5d53ad124978922f2c96bedb7d4) .

Yur*_*ras 2

我不是专家,但我相信 cabal 配置了他知道并能够找到的所有构建工具。构建时,cabal 会生成cabal_macros.h带有宏的文件来测试构建工具版本。如果CPP启用扩展,则该文件将包含在任何地方,并且所有内容都会根据cabal_macros.h.