CMake doesn't generate the code coverage report for source files

Viewed 402

I have the following project structure:

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


Contents of main 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()

...

Contents of 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       
)

Code coverage report is also generated. But it reports for test file TestTCPAcceptor.cpp which is I don't want. I want coverage for source file (TCPAcceptor.cpp) instead. Where should I change to generate the report for source file and not for the test files. Any help would be appreciated.

Following is the html code coverage report. enter image description here

1 Answers

Resolved myself. The following flags were missing in the rootCMakeLists.txt. Make sure to put the flags before source subdirectory.

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}" )
Related