Я решил использовать такую настройку, чтобы имитировать работу проекта построен на системе CI.
Проект состоит из тестового исполняемого файла E и двух статических библиотек: L1 и L2, имеющий следующие зависимости: L1 -> L2; L1, L2 -> E.
Он собирается с использованием системы CMake.
При сборке для покрытия кода в самом начале всего процесса я добавляю все нацелены на следующие флаги компилятора (
Код: Выделить всё
CMAKE_CXX_FLAGS
Затем я создаю отчет о покрытии кода, используя следующую команду:):): р>
Код: Выделить всё
-- C:/msys64/mingw64/bin/gcovr.exe --html index.html --html-details -r
--object-directory= --gcov-executable=llvm-cov gcov --merge-mode-functions=merge-use-line-min --exclude-unreachable-branches --exclude-function-lines --exclude-lines-by-pattern '^\s*\}?\s*$'
Однако , полученный отчет — мусор. В частности, многочисленные пустые строки, а также строки, содержащие только комментарии/закрывающие скобки, помечаются как «не попадающие», что делает вывод бесполезным.
Обратите внимание, что я использовал --exclude-lines-by-pattern '^\s*\}?\s*$', но по каким-то причинам он не отфильтровал упомянутые проблемные строки.
Вот отрывок из созданный отчет:

Что мне следует сделать? сделать, чтобы результаты были более точными? Использовать разные флаги компилятора/компоновщика? Другой инструмент покрытия?
Другой набор инструментов — не такое уж осуществимое решение, так как тогда мне пришлось бы постоянно перестраивать весь проект, чтобы переключаться между, например, Clang GCC.
Я пытался добавить флаги компилятора -Xclang -fprofile-instrument=clang ко всем целям сборки, но затем процесс сборки застрял на связывание моего тестового исполняемого файла E (или процесс замедлился, и я предположил, что он устарел; вместо завершения, скажем, за 10-20 секунд, он не завершился даже через несколько минут).< /п>
Подробнее здесь: https://stackoverflow.com/questions/791 ... -clang-pro