Haskell覆盖率 - HPC找不到Main

10

我有一个由许多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有经验吗?

编辑:我的编译过程 我有一个非常复杂的编译方案。 实际上,我只是在另一个问题中写下了它。

我使用一个非常特定的程序库,通过使用--no-user-package-db--package-db=/usr/local/ghc-7.6.3-200814来明确指定该库。 那个目录的列表可以在这里找到


你是如何编译的?(直接使用ghc - 什么选项?还是使用cabal - 显示.cabal文件) - d8d0d65b3f7cf42
我有一个相当复杂的编译方案。实际上,我只是在另一个问题中写下了它(https://dev59.com/w18e5IYBdhLWcg3wucb-#25660388)。 - Arnon
1个回答

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接