用cmake设置gcovr-如何在所有静态库上递归获取代码覆盖率

时间:2019-09-06 09:42:08

标签: cmake gcov gcovr

我已经设置了gcovr来获得我的c ++项目的代码覆盖,这在嵌套静态库的层次结构方面非常复杂。

我尝试的一种方法是在需要计算覆盖率的目标上包括必需的编译选项(-fprofile-instr-generate -fcoverage-mapping -fPIC -fprofile-arcs -ftest-coverage)和链接目标库标志(-fprofile-instr-generate)。但这不包括子静态库中的代码。 为了解决这个问题,我将标志添加到了儿童静态库中,该库可以正常工作,但不适用于子孙及以后的工作。

如何正确设置cMake以获取所有类的代码覆盖范围,而不论它们在库中的位置如何?

1 个答案:

答案 0 :(得分:0)

我发现我需要为静态库显式调用add_code_coverage函数。 最终结束了以下包装方法的编写:

function(target_link_libraries_with_coverage targetName library)
    target_link_libraries(${targetName} ${library})
    add_code_coverage(${library})
endfunction()

在链接需要覆盖的库时,应调用它而不是target_link_libraries。

注意:add_code_coverage正在添加必需的编译选项