【问题标题】:CMake doesn't generate the code coverage report for source filesCMake 不会为源文件生成代码覆盖率报告
【发布时间】:2021-08-10 11:11:00
【问题描述】:

我的项目结构如下:

├── app
│   ├── CMakeLists.txt
│   └── tcpstream
│       ├── CMakeLists.txt
│       ├── include
│       │   └── TCPAcceptor.h
│       └── src
│           └── TCPAcceptor.cpp
├── cmake
│   └── CodeCoverage.cmake
├── CMakeLists.txt
└── test
    ├── CMakeLists.txt
    └── TestTCPAcceptor.cpp


主 CMakeLists.txt 的内容:

...

if(BUILD_TESTING)  
  find_package(GTest 1.8.0 EXACT REQUIRED COMPONENTS gtest gmock gtest_main)
  if(NOT GTest_FOUND)
    message(FATAL_ERROR "Couldn't find gtest")
  endif()
  enable_testing()
  include(CodeCoverage)
  append_coverage_compiler_flags()
  set(COVERAGE_LCOV_EXCLUDES "${CMAKE_CURRENT_LIST_DIR}/test/*")
  add_subdirectory(${CMAKE_SOURCE_DIR}/test)
endif()

...

test/CMakeLists.txt的内容:

cmake_minimum_required(VERSION 3.16)
add_executable(TestTCPAcceptor
TestTCPAcceptor.cpp
    $<TARGET_PROPERTY:tcpstream,SOURCE_DIR>/include/TCPAcceptor.h
)

target_include_directories(TestTCPAcceptor
    PRIVATE
    $<TARGET_PROPERTY:tcpstream,SOURCE_DIR>/include
)

target_link_libraries(TestTCPAcceptor
    PUBLIC
    tcpstream
    GTest::gtest_main
    GTest::gtest
    GTest::gmock         
)

add_test(NAME TestTCPAcceptor COMMAND TestTCPAcceptor)

# Set up coverage for test executables
setup_target_for_coverage_gcovr_html(
    NAME coverage                 
        EXECUTABLE  TestTCPAcceptor  
        
        DEPENDENCIES  
        TestTCPAcceptor       
)

还会生成代码覆盖率报告。但它报告了我不想要的测试文件TestTCPAcceptor.cpp。我想要覆盖源文件(TCPAcceptor.cpp)。我应该在哪里更改以生成源文件而不是测试文件的报告。任何帮助将不胜感激。

以下是 html 代码覆盖率报告。

【问题讨论】:

    标签: cmake code-coverage googletest gcovr


    【解决方案1】:

    自己解决了。 rootCMakeLists.txt 中缺少以下标志。确保将标志放在源子目录之前。

    set(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage")
    set(GCC_COVERAGE_LINK_FLAGS    "-coverage -lgcov")
    set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
    set(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
    

    【讨论】:

    • append_coverage_compiler_flags() 应该可以解决问题 - 它相当于 AFAIK 所需的所有标志。
    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 2011-03-09
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多