由于某些原因,我需要将基于 cmake 的项目从 g++ 切换到 clang。我已在 Ubuntu 20.04 上切换到 llvm-11。我编译了项目本身,单元测试也正常工作。不过,让报道报告再次发挥作用似乎很困难。
我需要创建一个 cobertura xml 文件,以便将其集成到现有的 CI/CD 基础设施(Jenkins 和 Gitlab)中。我一直在使用旧版本的 [1] 进行 cmake cobertura 报告。
我认为“llvm-cov gcov”应该可以帮助我完成切换,但我最终得到的是一个空的 xml 文件,没有报告错误。
在空 xml 旁边有一个由 llvm-cov 生成的新 default.profraw 文件,该文件最终位于构建目录中。我到目前为止发现 llvm-profdata 可以转换的 .profdata 文件格式似乎比原始数据格式更适合作为转换的中间格式。因此,我生成了一个 .profdata 文件,用于使用以下命令进行测试:
llvm-profdata-11 merge -sparse default.profraw -o default.profdata
Run Code Online (Sandbox Code Playgroud)
我也可以从中生成一个 HTML 文件,其中实际上包含预期的覆盖范围:
llvm-cov show my-unit-tests -instr-profile=default.profdata ../src/*.cpp -path-equivalence -use-color --format html > coverage.html
Run Code Online (Sandbox Code Playgroud)
这也是 CMake 文件中的相关片段:
append_coverage_compiler_flags()
setup_target_for_coverage_gcovr_xml(
NAME coveragereports
EXECUTABLE my-unit-tests
DEPENDENCIES my-unit-tests my-app-lib-testing
#BASE_DIRECTORY "coverage"
#BASE_DIRECTORY "../"
EXCLUDE "${CMAKE_SOURCE_DIR}/libraries/*" "${CMAKE_SOURCE_DIR}/test/*" "/Library/*"
)
Run Code Online (Sandbox Code Playgroud)
我需要哪些工具/选项才能将 clang(11) 生成的覆盖率数据转换为 cobertura xml?
[1] https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |