Gcov在Windows下用MSVC编译Qt项目未生成.gcno文件问题求助
问题根因
--coverage是GCC、Clang编译器专属的覆盖率编译选项,MSVC编译器不识别该参数,且遇到--开头的未知编译参数时默认仅忽略、不会抛出错误,你新增的参数实际未生效,自然无法生成.gcno覆盖率记录文件。
适配MSVC的解决方案
可以用以下两种方案实现Windows+MSVC环境下的代码覆盖率采集:
方案1:改用OpenCppCoverage工具(无需修改编译参数)
这是Windows+MSVC场景下最常用的开源覆盖率采集工具,无需修改现有项目编译配置,仅需要编译时生成PDB调试文件即可:
- 确认你的编译参数中已经保留
/Zi、/DEBUG参数(你当前的配置已经满足),正常编译生成可执行文件 - 直接用OpenCppCoverage启动你的测试程序,自动生成覆盖率报告,命令示例:
OpenCppCoverage.exe --sources 你的源码根目录 -- .\你的可执行文件.exe 测试参数
方案2:使用MSVC原生覆盖率选项
如果不想引入第三方工具,可以改用MSVC自带的覆盖率编译参数:
- 替换掉原有的
--coverage参数,在编译参数(CXXFLAGS)中添加/GH /Gh,链接参数(LFLAGS)中添加coverage.lib - 该方案生成的覆盖率数据需要配合Visual Studio的覆盖率分析工具或vsinstr、vsperfcmd命令行工具使用
Qt项目适配调整
不要直接修改qmake生成后的Makefile,直接在.pro文件中添加条件判断区分编译器即可,示例配置:
win32-msvc* { QMAKE_CXXFLAGS += /Zi /GH /Gh QMAKE_LFLAGS += /DEBUG LIBS += coverage.lib } else { QMAKE_CXXFLAGS += --coverage QMAKE_LFLAGS += --coverage }
重新执行qmake生成Makefile后再编译即可。
内容的提问来源于stack exchange,提问作者Alban BECQUET
相关产品推荐
相关产品推荐

