首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用cmake设置gcovr -如何以递归方式获得所有静态库的代码覆盖率

使用cmake设置gcovr,以递归方式获取所有静态库的代码覆盖率,可以按照以下步骤进行操作:

  1. 首先,确保你的项目中已经使用了cmake进行构建,并且已经安装了gcovr工具。
  2. 在CMakeLists.txt文件中,添加以下代码来启用代码覆盖率检测:
代码语言:txt
复制
# 添加编译选项,启用代码覆盖率检测
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")

# 添加链接选项,启用代码覆盖率检测
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
  1. 在CMakeLists.txt文件中,为每个静态库目标添加以下代码,以确保代码覆盖率检测递归到所有静态库:
代码语言:txt
复制
# 为每个静态库目标添加代码覆盖率检测
target_link_libraries(target_name gcov)
  1. 在项目的根目录下,执行以下命令来生成构建文件:
代码语言:txt
复制
cmake .
  1. 执行以下命令来构建项目:
代码语言:txt
复制
make
  1. 执行以下命令来运行项目的测试用例:
代码语言:txt
复制
make test
  1. 执行以下命令来生成代码覆盖率报告:
代码语言:txt
复制
gcovr --root=项目根目录 --html --output=coverage.html

其中,项目根目录是你的项目的根目录路径。

  1. 打开生成的coverage.html文件,即可查看代码覆盖率报告。

这样,你就可以使用cmake设置gcovr,以递归方式获取所有静态库的代码覆盖率了。

注意:以上步骤是一种常见的设置方法,具体操作可能因项目结构和需求而有所不同。在实际应用中,你可能需要根据自己的项目情况进行适当的调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

代码覆盖率--gcovlcovgcovr

准备工具 请参考教程安装即可: GCC CMake Google Test gcov lcov gcovr 代码覆盖率 代码覆盖率一般包含以下几种类型: 函数覆盖率:描述有多少比例函数经过了测试。...只不过,通常情况下这样得到覆盖率较低罢了。 在项目中我们使用cmake编译,因此在CMakeLists.txt文件中设置覆盖率相关参数。...gcovr是一款针对C/C++代码覆盖率并支持以多种方式(包括列表方式、XML文件方式、HTML网页方式等)展示出来工具,而XML文件刚好是可以被持续集成工具解析。...gcovr有很多参数配合使用可以满足各种需求,gcovr使用方法可以通过以下这条命令查询: gcovr --help 我们一般关注以下这几个参数: -r ROOT 或者 --root ROOT 代码根目录...--xml -o coverage.xml 当前目录下生成coverage.xml文件详细记录了所有源码文件覆盖率信息。 常见问题:gcovr得到覆盖率为0% 解决:执行gcovr -r .

10.1K41

Sonar Scanner 之 C++扫码篇

工具链 - 覆盖率统计gcov C++代码覆盖率可以采用gcc自带gcov来实现了。具体原理和使用过程可以参见其它文章。...覆盖率检测这项工作除了简单代码插桩--用例执行--结果获取这几步之外,实际工程中还存在更为复杂场景,收集分布式系统或者是多环境并行执行测试结果,这需要对多个执行结果进行合并。...在Java项目中,一般可以通过Maven来管理代码编译、单元测试、覆盖率检测和静态扫描以及结果上报Sonar整个过程。...工作过程 一个典型过程是: 部署上述工具,形成标准化编译扫码环境 从代码检出代码,并转换到相应分支 通过cppcheck进行代码扫码 通过make进行gcc编译,编译过程中通过gccv进行插桩...如果有valgrind测试也可以在此处执行。 使用gcovr分析gcc覆盖率报告文件,并生成xml格式cobetura兼容报告。

7.5K50
  • C++最佳实践 | 1. 工具

    通用 一开始就设置非常严格警告,在项目开始后试图提高警告级别可能会很痛苦。 考虑使用将警告视为错误设置,例如MSVC中/Wx,以及GCC/Clang中-Werror。...如果需要检查所有代码,请记住为带有大量#ifdef代码添加--force。 cppclean cppclean[52]是开源静态分析器,专注于发现C++源代码中导致大型代码开发缓慢问题。...OCLint OCLint[61]是免费、自由、开源静态代码分析工具,可以通过许多不同方式提高C++代码质量。...这些工具都使用覆盖率报告来寻找新代码执行路径,并尝试为代码提供新输入。它们可以发现崩溃、挂起以及一些没有被考虑到输入。...为了进一步帮助执行测试,请考虑使用某个单元测试Google Test[83]、Catch[84]、CppUTest[85]或Boost.Test[86],以帮助组织测试。

    3.4K10

    量化你团队代码质量

    可持续:不是应付一次检查或攻坚,而是形成常态 可传承:新人只关注代码,不关注质量工具配置细节,通过类似于 MRs 结果反馈不断改进自身代码质量 一些涉及到权限控制位置(代码质量阈设置)是需要有管理员把控...准备工具 clang-tidy、infer 用于静态代码检查 lcov 用于统计单元测试代码覆盖率 gcovr 用于生成覆盖率报告及转为 SonarQube 支持报告格式 sonar-scanner...在 ne-phoenix 基础中,我们以 CMake + Conan 驱动整个工程编译,单元测试框架使用了 Google Test。...后续所有静态代码检查都是基于该文件进行。...通过次方式上传报告后,在 SonarQube 平台就可以展示测试覆盖率百分比情况了: 图片 SonarQube 平台支持设置统一质量阈,当你代码发现 Major 级别以上错误又或者覆盖率达不到一定百分比

    90830

    2021年软件测试工具总结(1):抓包工具、单元测试工具

    它能够记录客户端和服务器之间所有 HTTP请求,可以针对特定HTTP请求,分析请求数据、设置断点、调试web应用、修改请求数据,甚至可以修改服务器返回数据,但经典版只支持Windows系统,目前推出新...可以mock静态方法、私有变量及局部方法 代码覆盖率统计工具 官网地址:http://jmockit.org/ 单元测试覆盖率工具 JCoCo Jacoco是一个开源免费Java代码覆盖工具,由EclEmma.../jacoco/ gcov、lcov、gcovr gcov、lcov、gcovr都是支持C/C++语言代码覆盖率工具。...gcovr是一款针对C/C++代码覆盖率并支持以多种方式(包括列表方式、XML文件方式、HTML网页方式等)展示出来工具。...通过使用此自动测试工具能够在保证代码覆盖率前提下极大地提高测试人员开发效率。但是只能辅助测试,并不能完全取代人工,测试用例正确与否还需人工判断。

    2.5K20

    使用 Gcov 和 LCOV 度量 CC++ 项目的代码覆盖率

    本篇分享如何使用 Gcov 和 LCOV 对 C/C++ 项目进行代码覆盖率度量,以及在之前 关于代码覆盖率(Code Coverage) 篇中没有提到观点写在了本文最后《不要高估代码覆盖率指标》...当我再次重新调查代码覆盖率时候,我很惭愧发现原来正在使用 GCC 其实有内置代码覆盖率工具,叫 Gcov[2] 前提条件 对于想使用 Gcov 的人,为了说明它是如何工作,我准备了一段示例程序...旁注: 还有另外一个生成 HTML 报告工具叫 gcovr[6],使用 Python 开发,它报告在显示方式上与 LCOV 略有不同。...比如 LCOV 以目录结构显示, gcovr 以文件路径来显示,前者与代码结构一直因此我更倾向于使用前者。...借 Martin Fowler 在这篇测试覆盖率[7]文章说一句话: 代码覆盖率是查找代码中未测试部分有用工具,然而它作为一个数字说明你测试有多好用处不大。

    5.5K72

    Qt | CMake(Qt5 VS Qt6)

    点击上方"蓝字"关注我们01、CMake>>>CMake是一个简化跨不同平台开发项目构建过程工具。CMake自动生成生成系统,Makefiles和Visual Studio项目文件。...CMake是一个自带第三方工具证明文件。CMake 备忘清单02、如何使用CMake3.1.0带Qt 5>>>开始find_package找到Qt附带和头文件。...这是推荐方式。    【2】将CMake缓存中Qt5_DIR设置为Qt5Config.cmake文件位置。...将目标的名称传递给target_link_libraries以使用相应。注意:从Qt 5.15开始,CMake目标也可以作为Qt::Core、Qt::Gui等等使用。...# 查找Qt5Core组件,并且要求这个组件是必需find_package(Qt5 COMPONENTS Core REQUIRED)​# 设置覆盖率编译选项,将Release配置编译标志与覆盖率选项结合

    9710

    CMake常用命令一些整理

    ${PROJECT_SOURCE_DIR}/bin) 1.4 设置编译类型 # 编译静态 add_library(名称 STATIC 代码文件名称) # 编译动态 add_library(名称...( 静态1 静态2 静态3 ... ) 注意,link_libraries中静态为全路径,常与1.7 link_directories 搭配使用,例如: lib1...header file + .lib + .dll方式隐式调用动态.lib 1.13 file语法 1.13.1 将文件夹所有的类型文件添加到文件列表 例如将当前文件夹下所有.cpp文件文件名加入到...}/src/*.h) 1.13.2 递归搜索该文件夹,将文件夹下(包含子目录)符合类型文件添加到文件列表 例如将当前文件夹下(包括子目录下)所有.cpp文件文件名加入到MAIN_SRC中,所有.h加入到...如果未进行设置,使用ADD_LIBRARY时又没有指定类型,默认编译生成都是静态CMAKE_C_FLAGS 设置C编译选项,也可以通过指令ADD_DEFINITIONS()添加; CMAKE_CXX_FLAGS

    1.6K10

    CMake用法,这篇文章讲全了

    (VERSION 3.10) # 设置cmake最低版本要求为3.10 project(funclib) # 设置项目名称 # 递归查找source子目录下所有.cpp文件, # 并将它们添加到...# 添加静态目标 如上示例模拟了文件和测试程序构建,其中source文件夹存放代码,Test文件夹生成测试代码。.../lib) file(GLOB_RECURSE SOURCES "src/*.cpp") # 递归查找source子目录下所有.cpp文件,并将它们添加到SOURCES变量中 add_library...引用第三方(动态+静态) 针对于同时依赖静态和动态场景,需要在链接阶段找到lib,同时需要在运行阶段找到dll。.../include) # 添加第三方文件路径 link_directories(${CMAKE_SOURCE_DIR}/third_party/lib) # 递归查找source子目录下所有

    16110

    原创Paper | TinyInst 插桩实现原理分析

    ;TinyInst 以调试器身份启动/附加目标程序,通过监视目标进程中调试事件,加载模块、命中断点、触发异常等,实现对目标程序完全访问和控制,进而实现插桩和覆盖率收集等功能。...,递归发现、解析和重写所有的基本块代码。...) 函数中,执行实际插桩操作如下: 首先使用 InstrumentBasicBlock() 在基础块头部写入插桩代码 mov 指令,这里地址是 TinyInst 在目标模块工作内存空间初始化覆盖率...循环发现并解析完所有的基础块后,再统一修复在解析过程中待定跳转地址,最后将二进制重写代码写入目标模块工作内存空间内,修改目标程序 RIP 到二进制重写代码入口,随后目标程序正式开始执行。...除此之外,该函数还会修正全局调用表中对应 hash 位置,再次调用该函数时将直接跳转至以上代码,以代码缓存方式提高执行性能。

    58820

    面向 C++ 现代 CMake 教程(三)

    如果BUILD_SHARED_LIBS变量没有设置为ON,上述代码将生成一个静态。...遗憾是,并非所有环境都可以快速更新到最新版本。许多公司仍在使用生产中遗留系统,这些系统不再获得最新包。在这种情况下,用户可能只能使用较旧(但希望兼容)版本。...如果一个很受欢迎,并且很可能会在系统中已经安装,这种方法非常有效。然而,并非所有随时都能获得。我们能否让这个步骤变得简单,让我们用户使用 CMake 获取和构建这些依赖项?...让我们创建一个extern目录来存储所有第三方依赖项(第三章、设置第一个 CMake 项目部分中所述)并添加一个 Git 子模块,引用仓库: $ mkdir extern $ cd extern...记住,除非你使用-DCMAKE_BUILD_TYPE=Debug选项运行cmake,否则你无法获得任何覆盖率

    54600

    【可测试性实践】C++ 单元测试&代码覆盖率统计

    引言 最近在调研C++工程怎么做单元测试和代码覆盖率统计,由于我们工程有使用Boost,尝试使用Boost.Test来实现单元测试并通过Gcov和Lcov来生成代码覆盖率报告。...缺点: Mock功能需要额外Google Mock)。 Catch2: 优点: 代码简洁,测试代码可读性强,单头文件,集成方便。 缺点: Mock功能需要额外。...使用gcov + lcov统计代码覆盖率 准备工作 确保已经安装以下工具: CMake:用于构建项目。 GCC:支持代码覆盖率生成(其他编译器 Clang 也可以,但这里以 GCC 为例)。...gcov:GCC 自带代码覆盖率工具。 lcov:用于生成 HTML 格式覆盖率报告。 genhtml:用于将 lcov 生成覆盖率数据转换为 HTML 文件。...代码覆盖率总览 add.cpp代码覆盖率统计 main.cpp代码覆盖率统计 遇到问题 笔者开发环境主要是Mac+VSCode,但Lcov对Mac系统并不太友好,前面的demo工程虽然编译通过了,但生成代码覆盖率报告就报错

    15610

    CMake 秘籍(七)

    Doxygen 构建文档 使用 Sphinx 构建文档 结合 Doxygen 和 Sphinx 引言 文档在所有软件项目中都是必不可少:对于用户,解释如何获取和构建代码,并说明如何有效地使用代码...) 在这个简单例子中,我们不需要检测任何或头文件,但如果需要,我们将使用以下方式指定根路径: set(CMAKE_FIND_ROOT_PATH /path/to/target/environment...夜间模式将更新(或降级)代码到最接近最新夜间开始时间仓库快照,这可以在CTestConfig.cmake设置;它为接收频繁更新项目中所有夜间测试提供了一个定义良好参考点。...在本食谱中,我们将测量测试覆盖率并将其报告给 CDash 仪表板,以便我们能够逐行浏览测试覆盖率分析,以识别未测试或未使用代码。...为了获得更深入见解,我们可以点击该百分比,并获得两个子目录覆盖率分析,如下所示: 通过浏览子目录链接,我们可以检查单个文件测试覆盖率百分比,甚至可以浏览逐行总结(例如,src/sum_integers.cpp

    16100

    CMake学习笔记

    这对很重要,将在下一个示例中说明。有关此功能更多详细信息,请参见此处。 C. Static Library 添加静态 add_library() 函数用于从某些源文件创建一个。...填充目录 在此示例中,我们使用target_include_directories()函数来包含目录,scope设置为PUBLIC。...PUBLIC - 如上所述,它包含在此中以及链接到该所有目标。 对于public headers,通常最好将include文件夹与子目录进行 “命名间隔(namespaced)”。...对于此示例,您可以看到我们按以下方式进行操作: #include "static/Hello.h" 使用此方法意味着在项目中使用多个时,头文件名冲突可能性较小。...是GCOV图形化前端工具, 是Linux Test Project维护开放源代码工具,最初被设计用来支持Linux内核覆盖率度量。

    1.3K00

    程序员C语言快速上手——工程篇(十三)

    ,这就弄乱了源码工程目录,如果要发布源码,还得手动一个个去删除这些文件,这显然不是一种好构建方式,这种方式被称为内部构建,相应,我们需要使用外部构建方式来解决问题。...设置目标的一些属性,从而改变构建方式 link_directories添加搜索路径 aux_source_directory查找指定路径下所有源文件 综合实例调整上面示例工程结构,在工程根目录下创建四个文件夹...(${STATIC_LIB}) # 为main程序指定链接静态calc target_link_libraries(main ${STATIC_LIB}) 静态与动态使用add_library...命令默认生成静态add_library (calc add.c sub.c mul.c div.c),亦可加上参数STATIC显式指定,如需生成动态,则添加参数SHARED,add_library...(calc SHARED add.c sub.c mul.c div.c),此外,还可以通过设置变量BUILD_SHARED_LIBS来修改默认行为,当该变量为真时,默认会生成动态 # 使用option

    3.1K30

    面向 C++ 现代 CMake 教程(五)

    那就是从一开始就使用 CMake 并提前设置所有管道理由;这样做不仅配置起来会更简单,更重要是,早点做会更有效率,因为所有的质量控制和构建自动化最终都需要添加到长期项目中。...另外,您可以使用target_link_libraries()命令将它们作为依赖项添加。 在我们Calc中,对象将有助于避免为静态和共享版本重复编译源。...共享静态 我们在第六章中简要介绍了这两种使用 CMake 链接。我们提到,总体内存使用对于使用相同共享多个程序可能更有利,并且用户可能已经拥有最流行,或者知道如何快速安装它们。...将业务代码与共享calc_shared和 FTXUI 链接。 添加所有要在该目标上执行动作:生成构建信息、测试、程序分析和文档。...将所有 参数写入或追加到 文件中。如果提供系统路径不存在,它将递归创建。

    14500

    学习了CC++,居然不了解Cmake这一利器

    编译目标:静态、动态、可执行文件 这里我们需要做有以下任务: 把 math 路径下编译成静态; 将 main.c 编译成可执行文件,并依赖math 静态; 将 test 路径下测试源文件编译成执行文件...1、编译静态 首先,我们需要将 src/c/math 路径下源文件编译成静态。先使用 file 或者 set 命令获取源文件路径下文件列表,再通过 add_library 命令来编译静态。...add_library:用于定义一个目标,这里定义了一个名为 math ,STATIC 表示静态,动态使用 SHARED。...递归地查找 src/c/math/ 目录及其子目录下所有的 .c 文件,并将这些文件路径存储在 MATH_LIB_SRC 变量中。...并使用这些 .c 文件作为源文件,创建一个名为 math 静态

    14210

    关于 CMake 使用,看这一篇可能就够了

    设置编译类型 add_executable(demo demo.cpp) # 生成可执行文件 add_library(common STATIC util.cpp) # 生成静态 add_library...(dir VAR) 发现一个目录下所有的源代码文件并将列表存储在一个变量中。...}/include ) Linux 下还可以通过如下方式设置包含目录 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_CURRENT_SOURCE_DIR...设置链接搜索目录 link_directories( ${CMAKE_CURRENT_SOURCE_DIR}/libs ) Linux 下还可以通过如下方式设置包含目录 set(CMAKE_CXX_FLAGS...主要开关选项 BUILD_SHARED_LIBS:这个开关用来控制默认编译方式,如果不进行设置使用 add_library 又没有指定类型情况下,默认编译生成都是静态

    5.4K25

    CMakeCMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 )

    两个脚本 , 详细细节参考如下链接 ndk-build Android.mk Application.mk 使用预构建 Android 开发环境使用是这种方式编译 C/C++ 源码 ;...方式二 : 使用 CMake 构建脚本 CMakeLists.txt 编译 C/C++ 源码 , 参考如下链接 CMake 这是目前 Google 官方推荐方式 ; 二、CMake 构建脚本示例 --...导入静态 , 相当于预编译静态 # 后续还需要设置导入路径 , 配合该配置使用 add_library( # 设置引入静态名称...add # 设置引入函数类型为静态 STATIC # 表示引入第三方静态 IMPORTED) # 设置上述静态导入路径...CMake 构建脚本 CMakeLists.txt 中使用所有 CMake 命令都来自上述脚本命令和工程命令 , add_library , find_library , target_link_libraries

    3.8K01
    领券