cmake - 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
)。我应该在哪里更改以生成源文件而不是测试文件的报告。任何帮助,将不胜感激。
解决方案
自己解决了。根目录中缺少以下标志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}" )
推荐阅读
- flutter - 垂直窗口 TabBar 菜单和颤动中的动画指示器
- flutter - FutureBuilder 中的循环无法正常工作
- typescript - 什么是显示类的当前子实例的键的通用类型?
- asp.net-mvc - 如何在asp核心实体框架中获取子集的子集并传递给viewmodel
- flutter - 如何使用 Flutter 减少对 Firestore 的读取?
- couchbase - N1QL 文档包含对象查询列表
- rust - 将字符串转换为 Vec
在编译时进行模式匹配 - json - objectmapper.readValue() 失败并出现错误“没有从字符串值反序列化的字符串参数构造函数/工厂方法”
- templates - 用于多个类似部署的 helm 单个模板
- python - 如何在 python 中执行以下 matlab 代码?我正在尝试实现相同的 DWT + SVD 方法,但在 python 中