Я пытаюсь использовать gcovr 4.1 для генерации отчетов о покрытии для проекта совместно используемой библиотеки в C ++ / Qt при выполнении модульных тестов.У меня не было проблем с инструментарием моего кода, но у меня возникли проблемы при получении gcda-файлов для библиотеки, а также при получении полного отчета даже по модульным тестам, которые дали gcda-файлы.
Мой проектимеет следующую иерархию после запуска make
в project-root
и выполнения модульных тестов путем вызова x64/release/tests
:
project-root/
├─ Makefile
├─ build
| ├─ library/
| | ├─ GeneratedFiles/
| | | └─ <cpp files generated by Qt's moc compiler>
| | └─ obj
| | └─ <*.o, *.gcno, *.gcda> (gcda files show up after Edit #2)
| └─ tests/
| ├─ GeneratedFiles/
| | └─ <cpp files generated by Qt's moc compiler>
| └─ obj
| └─ <*.o, *.gcno, *.gcda>
├─ library/
| ├─ Makefile
| └─ src/
| ├─ subdir/
| | └─ <source files>
| └─ <other source files>
├─ tests/
| ├─ Makefile
| └─ src/
| ├─ subdir/
| | └─ <source files>
| └─ <other source files>
└─ x64/
└─ release/
├─ tests
└─ library.so
Обратите внимание, что build/library/obj
не содержит файлов gcda, в то время как build/tests/obj
делает. Всего в последнем каталоге 11 файлов gcda.
Я попытался запустить gcovr из нескольких каталогов с различными фильтрами.Некоторые примеры, которые, по крайней мере, приводят к выводу:
[user@50f886c6bdeb project-root] gcovr
Попытка указать исходные каталоги:
[user@50f886c6bdeb project-root] gcovr --filter library/src/ --filter tests/src/
Указание корня с полными путями:
[user@50f886c6bdeb project-root] gcovr -r /code/project-root/ --filter /code/project-root/library/src/ --filter /code/project-root/tests/src/
Каждыйиз них (наряду с несколькими другими вариантами) получаются идентичные результаты.
- Я получаю длинный список сообщений «Не удается открыть исходный файл»
- Он сообщает об охвате файлов сразу в
tests/src
, но не для tests/src/subdir
, хотя я могу проверить, что файлы gcda в подкаталоге содержат данные, изучив их с помощью gcov.
Файлы cpp в build/.../GeneratedFiles
получают инструментарий (т.е. имеют соответствующие файлы gcno);однако мне не особо важно, включены ли их данные в отчет.Мне нужно выяснить:
Как получить файлы gcda для генерации для библиотеки при выполнении модульных тестов? - Какую командную строку сделатьЯ использую, чтобы позволить gcovr объединить результаты и источник для этой структуры?
Я ценю любую помощь!
Edit # 1: Добавлены местоположения Makefilesи разъяснил, что такое сборка / запуск двоичного файла.
Edit # 2:
Часть загадки раскрыта. Опечатка в моем файле Qt * .pro предотвращена-fprofile-arcs от включения в флаги компоновщика для библиотеки.
Я нашел помощь в этом вопросе: gcov: создание вывода .gcda из общей библиотеки?
, который привел меня к этому gccпоток справки: поддержка gcov для общей библиотеки
, которая в итоге заставила меня проверить, где компилятор пытался сохранить файлы gcda, запустив:
[user@50f886c6bdeb release]strings library.so | grep gcda
Не было записей, поэтомуЯ дважды проверил настройки сборки для библиотеки и нашел свою ошибку,С этим исправлением файлы gcda создаются для файлов библиотеки, и gcov может создавать с ними отчет - включая файлы в library/src/subdir
(что противоречит поведению двоичных тестов).
Однако я все еще вижу всете же сообщения «Не удается открыть исходный файл».Попытка создать подробный HTML-отчет заканчивается неудачей, в результате чего возникает ошибка.