Haskell Coverage - HPC не может найти главную
У меня есть программа, которая создана из многих файлов С++ и Haskell.
Я компилирую весь Haskell с флагом -fhpc
, чтобы я мог запускать на нем тесты покрытия.
После завершения компиляции я запускаю программу и генерируются несколько файлов .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
.
Это списки каталогов доступны здесь
Ответы
Ответ 1
Наконец-то я получил его сегодня.
Я изменил свою компиляцию, чтобы вообще не иметь оптимизаций.
Я запустил свой сервер из базового каталога проекта, запустив ./build/Server ...
Я создал список всех моих модулей, которые будут включены с помощью sed внутри Make.
(Моя структура каталогов совпадает с именами модулей.
Например, имя файла 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
И вот как я решил свои проблемы.