Да, есть два основных способа управления генерируемыми отчетами о покрытии:
- Указание вашему генератору (например,
lcov
, gcovr
) включить / исключить определенные шаблоны файлов
- Компиляция только ваших исходных файлов с включенным покрытием.
(1) намного проще, чем (2). Например, если вы используете lcov
, рассмотрите вариант --extract
:
Используйте этот переключатель, если вы хотите извлечь данные покрытия только для
определенный набор файлов из файла трассировки. Дополнительная команда
параметры строки будут интерпретироваться как шаблоны подстановочных знаков оболочки
(обратите внимание, что, возможно, их необходимо избежать, чтобы предотвратить
оболочка от их расширения в первую очередь). Каждая запись в файле
файл трассировки, который соответствует хотя бы одному из этих шаблонов, будет
экстрагируют.
(2) может быть сложно (или невозможно) в зависимости от вашей системы сборки. Для этого вам необходимо:
- Компиляция только вашего модуля с
--coverage
(эквивалентно -ftest-coverage -fprofile-arcs
для компиляторов GNU)
- Свяжите вашу библиотеку с
lgcov
.
Это создаст *.gcno
файлы 'notes', которые сообщат генераторам покрытия о ваших исходных файлах только для файлов, которые вы скомпилировали с флагами --coverage
. Затем при запуске набора тестов файлы *.gcda
должны создаваться только для этого же набора файлов. Запуск окончательного отчета о покрытии / генератора HTML приведет к созданию отчета только для вашего модуля.
Для иллюстрации приведу простой файл CMake, который генерирует только информацию о покрытии для covered.cxx
. Обратите внимание на дополнительные target_compile_options
и target_link_libraries
для библиотеки covered
.
add_executable(${PROJECT_NAME} main.cxx)
add_library(not-covered SHARED not-covered.cxx)
add_library(covered SHARED covered.cxx)
target_compile_options(covered PRIVATE --coverage)
target_link_libraries(covered PRIVATE --coverage)
target_link_libraries(${PROJECT_NAME} covered not-covered)