1

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

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

如何正确设置 cMake 以获得所有类的代码覆盖率,而不管它们的库位置如何?

4

1 回答 1

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 是添加所需的编译选项

于 2019-09-25T10:48:57.060 回答