Arn*_*non 10 haskell code-coverage
我有一个由许多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"]
Run Code Online (Sandbox Code Playgroud)
该目录.hpc存在,它包含一个Main.mix与其他.mix文件一起调用的文件.
我注意到有些人在IRC聊天记录中报告了相同的问题,但我找不到解决方案.有没有人有这种hpc的经验?
编辑:如何编译我有一个相当复杂的编译方案.我其实只是在另一个问题上写下来了.
我使用一个非常具体的包库,我使用--no-user-package-db和明确指定--package-db=/usr/local/ghc-7.6.3-200814.该目录的列表可在此处获得
我今天终于跑起来了。我将编译更改为根本没有优化。我通过运行从基本项目目录运行我的服务器./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))
Run Code Online (Sandbox Code Playgroud)
然后创建目标(再次在 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
Run Code Online (Sandbox Code Playgroud)
这就是我解决问题的方法。