生成由单独的测试类调用的 C++ 静态库的测试覆盖率

ala*_*rs2 5 c++ gcc code-coverage gcov qt-creator

我正在使用 QT Creator 来处理一个 C++ 中型项目。

项目结构基本上是这样的

  1. 项目

    • A组
      • 图书馆A1
    • B组
      • 图书馆B1
      • 图书馆B2
      • ...ETC
    • 测试

      • LibA1_测试
      • LibB1_测试
      • LibB2_测试
      • ...ETC

这些库由测试项目中的可执行文件进行测试。我已经设法在启用 gcov 的情况下自行编译测试,并使用 lcov 生成代码覆盖率报告,但他们显示的覆盖率只是测试用例,而不是我正在测试的实际代码。我也尝试使用 gcov 编译静态库,但是当我对这些库运行测试时,它不会生成任何 gcov 输出文件。

如何通过将我的项目库与测试链接来生成 gcov 输出文件?我想看看我的单元测试是否存在任何差距。

Ste*_*mer 2

来自ld手册

--whole-archive
对于选项后命令行中提到的每个存档--whole-archive,请在链接中包含存档中的每个目标文件,而不是在存档中搜索所需的目标文件。

因此,使用 将静态库链接到测试中--whole-archive,这将导致您的测试二进制文件具有整个静态库,并提供gcov整个代码的可见性