Описание
Ну, я наконец нашел способ решить эту проблему.
Сгенерированные информационные файлы lcov
представляют собой обычный текстовый файл. Таким образом, мы можем редактировать их напрямую.
Как только вы откроете эти файлы, вы увидите, что каждая строка файла начинается с SF
. Как ниже:
SF:/path/to/your/source/code.h
SF:/path/to/your/source/code.cpp
...
Задача
В моей задаче это будет:
// file gcda1.info
SF:/path/to/root_dir/gcda1/src/unittest1.cpp
// file gcda2.info
SF:/path/to/root_dir/gcda2/src/unittest1.cpp
А после lcov
слияния это будет:
// file gcda.info
SF:/path/to/root_dir/gcda1/src/unittest1.cpp
SF:/path/to/root_dir/gcda2/src/unittest1.cpp
Но, я ожидаю этого:
// file gcda.info
SF:/path/to/root_dir/src/unittest1.cpp
Метод
Мой метод решения проблемы - редактирование информационных файлов напрямую.
Сначала отредактируйте gcda1.info
и gcda2.info
, измените /path/to/root_dir/gcda1/src/unittest1.cpp
на /path/to/root_dir/src/unittest1.cpp
и /path/to/root_dir/gcda2/src/unittest1.cpp
на /path/to/root_dir/src/unittest1.cpp
.
Затем объедините их, как показано ниже, и сгенерируйте отчет html:
$ lcov -a gcda1.info -a gcda2.info -o gcda.info
$ genhtml gcda.info -o output
В большом проекте мы не можем вручную редактировать каждый информационный файл, иначе вы свернетесь.
Мы можем использовать sed
, чтобы помочь нам. Как ниже:
$ sed "s/\(^SF.*\/\)gcda[0-9]+\/\(.*\)/\1\2/g" gcda_tmp.info > gcda.info