首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得CMake和Catch2测试的覆盖率

如何获得CMake和Catch2测试的覆盖率
EN

Stack Overflow用户
提问于 2021-01-06 20:44:26
回答 1查看 1.9K关注 0票数 2

我试图在一个使用lcov进行测试的C++项目上打印Catch2的覆盖范围。我能做我的测试并得到结果。但是,我无法得到任何报道。这是显示的错误。

代码语言:javascript
复制
Capturing coverage data from .
Found gcov version: 9.3.0
Using intermediate gcov format
Scanning . for .gcda files ...
geninfo: WARNING: no .gcda files found in . - skipping!
Finished .info-file creation
Combining tracefiles.
Reading tracefile coverage.base
lcov: ERROR: no valid records found in tracefile coverage.base

我现在的工具链是WSL。我正在使用Conan进行依赖关系管理。该解决方案的结构如下:

代码语言:javascript
复制
my project/
├─ build/
│  ├─ build files
├─ core/
│  ├─ library files
├─ main/
│  ├─ main runtime
├─ tests/
│  ├─ test runtime/
├─ CMakeLists.txt

每个文件夹都有自己的CMakeLists.txt文件,并被标识为目标。我还使用这个CMake模块注册了一个覆盖范围的目标。

我的根CMakeLists.txt如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.16)
project(my-project)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "-O0")

include(build/conanbuildinfo.cmake)
conan_basic_setup()

add_subdirectory(core)

option(BUILD_TESTING "Builds only the test executable." OFF)
option(CODE_COVERAGE "Collect coverage from test library" OFF)

if(BUILD_TESTING)
    enable_testing()
    add_subdirectory(tests)
    add_test(NAME project-tests COMMAND ./bin/tests)

    if(CODE_COVERAGE)
        include(CodeCoverage.cmake)
        append_coverage_compiler_flags()
        setup_target_for_coverage_lcov(NAME coverage EXECUTABLE ./bin/tests BASE_DIRECTORY ../coverage)
    endif()
else()
    add_subdirectory(main)
endif()

为了获得我的报道,我使用了以下命令(在build/上)。

代码语言:javascript
复制
cmake .. -DCODE_COVERAGE=ON -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Debug
make
make coverage

据我所知,它似乎缺少一些必要的文件覆盖信息,但我不知道如何制作它们。根据我在网上所看到的,我有所有必要的编译器标志。我看不出这里面有什么不对劲。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 20:59:13

我相信你忘了添加适当的旗子

代码语言:javascript
复制
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65603144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档