【问题标题】:C++ using GCOV/LCOV in a CMake project在 CMake 项目中使用 GCOV/LCOV 的 C++
【发布时间】:2015-08-01 11:10:06
【问题描述】:

我正在一个 C++ 项目中工作,其结构类似于以下内容:

---  /src
    |--comms
    |--utils
    |--interfaces
    …
    CMakeList.txt
--- /test
    |---test1/
              |--main.cpp
              |--CMakelists.txt

--CMakeLists.txt

我确实需要控制测试的覆盖率,为此我以这种方式使用 GCOV 和 LCOV:

  1. 在所有 CMakeLists.txt 中启用覆盖标志以允许生成 .gcno 文件。

    SET(CMAKE_CXX_FLAGS "-g -O0 -Wall -fprofile-arcs -ftest-coverage")
    SET(CMAKE_C_FLAGS "-g -O0 -Wall -W -fprofile-arcs -ftest-coverage")
    SET(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")
    
  2. 运行测试,生成对应的.gcda文件。

    此时,文件gcno和gcda与对应的.o文件位于同一目录下。我无法移动这些文件,因为如果我这样做,报告覆盖率生成将不起作用。

  3. 从文件.gcno.gcda 所在的目录中,我执行以下操作:

    lcov –c –d . –o name.info      
    
  4. 使用以下命令生成 HTML 报告:

    genhtml  name.info.
    

当我编译我的项目时,我复制了.gcno 文件,因为编译测试时他们需要重新编译它们的依赖项(comms、utils 等),因为我不为这些依赖项生成库。如果我不使用库,我认为没有办法避免这种情况。

但是,当我尝试为全球项目生成 index.html(覆盖率报告)时,它不起作用。

我使用 Shell 脚本创建与我的项目相同的文件夹结构,并将每个 .gcno.gcda 复制到相应的目录。我执行命令lcovgenhtml,但index.html 包括所有项目覆盖范围。

我将不胜感激。

【问题讨论】:

    标签: cmake gcov lcov


    【解决方案1】:

    尝试将--ignore-errors 与 genhtml 命令类似:

    genhtml -o out name.info --ignore-errors source
    

    【讨论】:

      猜你喜欢
      • 2011-06-18
      • 2011-02-15
      • 2023-04-02
      • 2020-02-22
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多