奇技淫巧[2]:cmake中添加lcov代码覆盖测试

1 目的

为CMake工程的test添加lcov代码覆盖性测试

2 要点

添加lcov支持的方法应该有很多,比较方便的有:

  • (1)利用脚本基于文件夹名来查找${test_name}.dir文件夹,然后再把.sh添加到add_custom_target中作为target执行
  • (2)为cmake添加一个add_custom_target对象来执行相关lcov命令

3 方法

3.1 基于脚本

不作赘述,文后附上代码(修改自链接)

3.2 基于cmake

引入了一个github上的.cmake脚本(链接)

cmake代码如下:

string(TOLOWER ${CMAKE_BUILD_TYPE} _type)
if(${_type} STREQUAL "debug")include(CodeCoverage)APPEND_COVERAGE_COMPILER_FLAGS()SETUP_TARGET_FOR_COVERAGE_LCOV(NAME test_lcov EXECUTABLE make test)
endif()

编译时:

mkdir build
cd ./build
cmake .. -DCMAKE_BUILD_TYPE=Debug
make
make test_lcov

打开/build/test_lcov下的index.html,就可以查看结果报告,这里就贴一张网图示意一下

要点:

  • lcov只能在debug下进行
  • 所添加的用于测试的target对象可以将make test(或ctest)进行整体统计,也可以对单个的test可执行文件进行统计
  • 相关用法.cmake中有详细说明

注意:

  • 笔者在使用过程中出现了找不到FindPython.cmake的问题,可以尝试修改line:78find_package(PythonInterp)

4 附件

lcov.sh

basepath=`pwd`function print_help {echo "#######################################################################"echo "# Example:                                                            #"echo "#   ./generate_coverage.sh build_gcc                                  #"echo "#                                                                     #"echo "#######################################################################"return 0
}if [[ $# -ne 1 ]]
thenprint_helpecho "ERROR: Please name the build directory as the first parameter."exit -1
fibuilddir=${1}
cd ${builddir}rm -rf ${basepath}/coverage
mkdir -p ${basepath}/coveragefor testdir in `find ${basepath}/${builddir} -type d | grep -o 'test/.*/.*dir'`
dotestname=`expr "$testdir" : '.*(test_[a-zA-Z-_]*).dir'`echo "Gathering Coverage for ${testname}"cd $testdirlcov --zerocounters  --directory .cd ${basepath}/${builddir}ctest -R $testnamecd $testdirlcov --directory . --capture --output-file ${testname}.infogenhtml ${testname}.info --output-directory out
done


coverage 覆盖多个测试文件时_奇技淫巧[2]:cmake中添加lcov代码覆盖测试相关推荐

  1. php包含文件时显示空白页,php中添加了如下语句出现空白页 删除页面zhengchang

    添加如下几天语句页面变为空白,删除正常 echo "isset($tireqty)".isset($tireqty)." "; echo "isset ...

  2. java中打开文件显示_从java程序中打开任何文件

    在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...

  3. matlab 将图形另存时,在文件名字符串中添加参数,总是保存出错,无效文件名

    将图形另存时,在文件名字符串中添加参数,总是保存出错,解决方式如下: 注意:我尝试过 string(1) char(1) 等都不可以,提示无效文件名. filename = ['Point cloud ...

  4. python创建文件夹 覆盖_Python 创建新文件时避免覆盖已有的同名文件的解决方法...

    思路:创建文件时,先检查是否有同名文件(使用os.path.isfile),如果有,则在文件名后加上编号n来创建. 关键点: 1. 使用os.path.isfile判断文件是否存在 2. 使用递归函数 ...

  5. 中查询一个文件夹下文件数量_如何在 Bash 中使用循环 | Linux 中国

    使用循环和查找命令批量自动对多个文件进行一系列的操作.-- Seth Kenlon(作者) 人们希望学习批处理命令的一个普遍原因是要得到批处理强大的功能.如果你希望批量的对文件执行一些指令,构造一个可 ...

  6. nodeJS IOS手机和平板端在微信中下载文件时,弹出框中文件名乱码解决方案(Content-disposition:attachment; filename)

    今天做项目的时候遇见一个问题.下载文件时在谷歌,Edge和火狐中文件名是正确显示的.但是在IOS端(这里我只是测试了平板和手机,苹果电脑的safari没有测试)微信弹窗中会出现%E4%BA%BF%E6 ...

  7. python代码测试工具模块_详解Python中的测试工具

    当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试过程 ...

  8. linux打开文件命令_详解Linux中3个文件查找相关命令

    来自:民工哥技术之路 1.which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which  查看可执行文件的位置. whereis 查看文件的位置. ...

  9. linux查看文件时显示行号,linux中查看文件时显示行号

    linux中查看文件时显示行号 [root@1-min etc]# cat -n rsyslog.conf              //显示所有行号(包括空行) [root@1-min etc]# ...

最新文章

  1. SQL UPDATE SET FROM用法
  2. mapreduce介绍
  3. 面试题01(C++)
  4. bzoj 2763 [JLOI2011]飞行路线——分层图
  5. 比特币将来能取代黄金,成为世界货币?
  6. 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性)
  7. 在ECSHOP后台左侧导航中增加新菜单
  8. 判断是否是完全二叉树和是否为满二叉树
  9. BIOS和DOS中断例程的安装过程
  10. 明天(20171017)继续学习阅读的文章
  11. 跳石头 vijos1981 NOIP2015 D2T1 二分答案 模拟 贪心
  12. could not resolve property: qid of: org.lxh.myzngt.vo.Answer
  13. python毕业设计题目推荐飞机票销售订票系统
  14. Java开发--implement Serializable
  15. c语言编程齿轮模数选择,斜齿轮变位系数分配-C程序.doc
  16. linux 彻底删除oracle,Linux下完美卸载Oracle
  17. nm命令 查看符号文件
  18. GNU和LINUX到底怎么个发音?
  19. python爬取百度迁徙动态图_爬取动态图片—以百度图片为例
  20. PetShop全版本(2.0-5.0)

热门文章

  1. Nature、Science的绘图新宠,博导人论文覆盖率高达78%...
  2. microbiomeMarker:整合多种biomarker分析工具的R包
  3. NEJM | 益生菌LGG治疗肠胃炎无效,Immunity|LGG促进生骨
  4. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所特定数据行、指定数据行(index a row of a level)、使用元组tuple表达复合索引的指定行
  5. python使用matplotlib可视化堆叠的柱状图(stacked bar plot)、多个类别的数据在分类变量层面累积堆叠起来
  6. pandas使用isna函数和any函数计算返回dataframe中包含缺失值的数据行(rows with missing values in dataframe)
  7. R语言使用fs包的dir_delete函数删除指定的文件目录(remove the directory)、举一反三、file_delete函数、link_delete函数可以用来删除文件和文件夹
  8. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(构建自定义函数配置显示均值、标准偏差)实战
  9. R语言pacman包管理R编程语言需要的包实战:使用p_load函数安装和加载多个R包、使用p_unload函数卸载多个R包、使用p_update函数更新过期的R包
  10. HBase眼高手低从Shell到IDEA编程、心路笔记、踩坑过程