如何将 llvm proraw 转换为 cobertura

ben*_*ist 7 cmake clang

由于某些原因,我需要将基于 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

小智 0

llvm-covlcov可以生成一个可以轻松转换为 Cobertura 格式的报告。使用lcov-cobertura Python 模块或其他任何东西。