CMake/CTest代码覆盖率检查

4
我可以使用CMake来运行覆盖率检查,按照这个维基页面的说明进行操作。这非常简单,设置一个仪表板后,我可以在浏览器上获得很好的代码覆盖率视图(后半部分)。但我不想每次都运行ctest只是为了检查单个文件的进度。实际上,我想要检查子目录的代码覆盖率,而不是整个包含第三方代码的库。

那么,我们如何检查子目录的代码覆盖率呢?当然,我已经在cmakelists.txt中使用add_test(....)编写了测试。

我将尝试进行一些解释,没有任何代码。

Class A {   
public:    
    A() {}

....     
so many methods ..
....

protected:
    ~A() {} 
}; //end class A

接下来我写了一个测试:

//testA
int main()
{
    A *a = new A();

    a->method1();

    a->method2();
    ...
}

现在在CMakeLists.txt文件中,我有以下内容:
add_test(testA ...)

当我运行ctest时,它会运行所有测试,包括TestA。当然,我可以使用ctest -R "TestA"
现在回到问题,我如何检查仅class A的覆盖率,而无需运行所有测试或仅运行testA
1个回答

2
我创建了一个cmake脚本,用于生成覆盖率数据,该数据可用于http://coveralls.io/服务(适用于开源项目免费)。
该脚本允许您指定要从中收集代码覆盖率的确切文件(与大多数脚本相比,它允许您排除文件)。因此,您可以使用file(GLOB获取所需的文件或手动指定。该脚本还可以修改为仅运行lcov并生成本地html报告。
参考链接:https://github.com/JoakimSoderberg/coveralls-cmake https://github.com/JoakimSoderberg/coveralls-cmake-example 如果您对http://coveralls.io/不感兴趣,这里有另一个脚本,它使用lcov仅生成本地html报告:
参考链接:https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接