首页 > 解决方案 > CMake 不会为源文件生成代码覆盖率报告

问题描述

我有以下项目结构:

├── 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 代码覆盖率报告。 在此处输入图像描述

标签: cmakecode-coveragegoogletestgcovr

解决方案


自己解决了。根目录中缺少以下标志CMakeLists.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}" )

推荐阅读