如何在CLion中排除库文件,仅分析自有代码的覆盖率?
解决CLion代码覆盖率排除GTest等库文件的方法
方法1:通过CMake配置过滤规则
在你的CMakeLists.txt中,为测试目标添加覆盖率相关配置,明确排除GTest的目录:
if (BUILD_TESTING) include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG release-1.12.1 ) FetchContent_MakeAvailable(googletest) add_executable(${PROJECT_NAME}_test test/matrix_test.cpp src/matrix.cpp) target_compile_features(${PROJECT_NAME}_test PUBLIC cxx_std_17) target_link_libraries(${PROJECT_NAME}_test GTest::gtest_main) target_include_directories(${PROJECT_NAME}_test PRIVATE include) # 配置覆盖率过滤(针对GCC/Clang编译器) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") target_compile_options(${PROJECT_NAME}_test PRIVATE --coverage) target_link_options(${PROJECT_NAME}_test PRIVATE --coverage) # 获取GTest的路径并设置排除规则 get_target_property(GTEST_INCLUDE_DIR GTest::gtest INTERFACE_INCLUDE_DIRECTORIES) set(COVERAGE_EXCLUDES "${GTEST_INCLUDE_DIR}/*" "${CMAKE_BINARY_DIR}/googletest-src/*") endif() include(GoogleTest) gtest_discover_tests(${PROJECT_NAME}_test) endif ()
方法2:直接在CLion中设置过滤规则
- 打开CLion的Settings/Preferences(Windows/Linux按
Ctrl+Alt+S,Mac按Cmd+,) - 进入Build, Execution, Deployment > Coverage
- 在Exclude files区域点击
+,添加需要排除的路径:- 直接添加你观察到的GTest路径:
cmake-build-debug-coverage/googletest-src/googletest/* - 也可以添加系统级的GTest头文件路径(如
/usr/include/gtest/*)
- 直接添加你观察到的GTest路径:
- 保存设置后重新运行覆盖率测试即可
方法3:用lcov手动处理覆盖率数据
如果需要更精细的控制,可以用lcov工具手动过滤:
- 运行测试生成原始覆盖率文件(
.gcda/.gcno) - 生成原始覆盖率信息文件:
lcov --capture --directory . --output-file coverage_raw.info - 过滤掉GTest等库文件:
lcov --remove coverage_raw.info '/usr/*' '*/googletest-src/*' --output-file coverage_filtered.info - 在CLion中导入
coverage_filtered.info文件查看过滤后的覆盖率结果
内容的提问来源于stack exchange,提问作者fdermishin
相关产品推荐
相关产品推荐

