链接而不是在堆栈/ cabal中构建

时间:2019-07-17 14:03:59

标签: haskell cabal haskell-stack

问题:

为了使库链接而不是构建,我必须在.cabal文件中做什么?

背景:

我正在尝试从命令stack test --coverage中获取承保范围详细信息

运行此版本时,我收到错误消息

Error: The coverage report for xmonad's test-suite "properties" did not consider any code. One possible cause of this is if your test-suite builds the library code (see stack issue #1008). It may also indicate a bug in stack or the hpc program. Please report this issue if you think your coverage report should have meaningful results.
Only one tix file found in /home/paul/temp/xmonad_coverage/.stack-work/install/x86_64-linux/09c83ca90bc1875ad3d1b5ea4a2a0c369c6367f3ad989533e627c073ee9962e0/8.0.1/hpc/, so not generating a unified coverage report.

在堆栈文档站点https://docs.haskellstack.org/en/stable/coverage/上,它说要运行覆盖范围,我必须具备:

  
      
  1. 这些测试套件链接到您的库,而不是构建   直接图书馆。覆盖范围信息仅针对图书馆提供,忽略   直接编译到可执行文件中的模块。常见情况   当您的测试套件和库都具有   类似于hs-source-dirs:src /。在这种情况下,构建测试时-   套件,您也可能正在编译您的库,而不仅仅是链接   它。
  2.   

当我在.cabal文件中查找该库时

 hs-source-dirs:  src

还有测试。

  hs-source-dirs: tests

我不了解这些功能的目的以及这些原因是否导致了库的建立而不是链接。

这可能是stack test --coverage失败的原因吗?还是我看错地方了?

1 个答案:

答案 0 :(得分:0)

事实证明,我可以通过以下操作解决此问题:

 stack clean; stack build; stack test --coverage --ghc-options "-fforce-recomp" 

如Michael Sloan在https://github.com/commercialhaskell/stack/issues/1305所述 他对类似问题的解释是:

  

看起来发生了什么事,尽管该库没有得到重建   使用--ghc-options -fhpc重新配置并构建软件包。结果,.tix   测试生成的文件仅包含测试本身的覆盖率信息