【问题标题】:Haskell Coverage - HPC can not find MainHaskell Coverage - HPC 找不到 Main
【发布时间】:2014-08-26 12:36:50
【问题描述】:

我有一个由许多 C++ 和 Haskell 文件组成的程序。 我用-fhpc 标志编译了所有的Haskell,这样我就可以对其进行覆盖测试。

编译完成后,我运行程序,生成了几个.tix文件。

问题:例如,我尝试运行hpc markup build/Server --srcdir=.。 然后它将生成一些文件,但过早地失败:

Writing: file1.hs.html
Writing: file2.hs.html
Writing: file3.hs.html
hpc: can not find Main in ["./.hpc"]

目录.hpc 存在,它确实包含一个名为Main.mix 的文件以及其他.mix 文件。

我注意到有些人在 IRC 聊天日志上报告了相同的问题,但我没有找到解决方案。 有人在 hpc 方面有过这种经验吗?

编辑:我如何编译 我有一个相当复杂的编译方案。 我其实只是wrote it down in another question

我使用了一个非常具体的包库,我使用--no-user-package-db--package-db=/usr/local/ghc-7.6.3-200814 明确指定了它。 那directory's listings is available here

【问题讨论】:

  • 你是怎么编译的? (直接 ghc - 什么选项?或 cabal - 显示 .cabal 文件)
  • 我有一个相当复杂的编译方案。我其实只是wrote it down in another question

标签: haskell code-coverage


【解决方案1】:

我今天终于让它运行起来了。 我将编译更改为根本没有优化。 我通过运行 ./build/Server ...

从基础项目目录运行我的服务器

我在 Make 中使用 sed 生成了要包含的所有模块的列表。

(我的目录结构和模块名一样。 例如,文件名haskell/Database/Module/Server/Server.lhs 将变为 Database.Module.Server.Server。)

includify = $(foreach pkg,$(1), --include=$(pkg))
MODULES = $(shell find haskell -name "*.lhs" | sed -e "s/\.lhs\$$//g" | sed -e "s/^haskell\///g" | sed -e "s/\//\./g")
INCLUDES = $(call includify,$(MODULES))

然后创建目标(再次在 Make 中)

@echo "WRITING coverage/result.xml"
@hpc report Server srcdir=build $(INCLUDES) --xml-output > build/coverage/result.xml
@echo "WRITING coverage HTML FILES"
@hpc markup Server srcdir=build $(INCLUDES) --destdir=build/coverage

这就是我解决问题的方法。

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 2022-08-04
    • 1970-01-01
    • 2020-12-31
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多