当前,在我们的项目中,我们的客户和我们的团队并行工作,以构建团队两个模块所需的代码。我们正在使用gcov进行代码覆盖。当前,生成的覆盖率显示了两个团队。有什么方法可以只为我们的模块生成单位gcov覆盖率。(我们的模块不是单独构建的)。
有什么方法可以仅对我们的文件运行(或者)是否可以基于函数名运行?
答案 0 :(得分:0)
是的,有两种主要方法可以控制生成的覆盖率报告:
lcov
,gcovr
)以包含/排除某些文件格式(1)比(2)容易得多。例如,如果您使用的是lcov
,请考虑使用--extract
选项:
如果您只想提取覆盖范围数据,请使用此开关 跟踪文件中的特定文件集。附加命令 行参数将被解释为外壳通配符模式 (请注意,可能需要对其进行相应的转义以防止 外壳先展开)。中的每个文件条目 至少匹配这些模式之一的跟踪文件将是 提取。
(2)可能很难(或不可能),具体取决于您的构建系统。为此,您将需要:
--coverage
编译模块(对于GNU编译器,等效于-ftest-coverage -fprofile-arcs
)lgcov
关联。这将产生*.gcno
个“注释”文件,这些文件将覆盖--coverage
标记的文件的源文件仅 告知coverage生成器。然后,在运行测试套件时,仅应为同一组文件生成*.gcda
文件。运行最终的覆盖率报告/ HTML生成器只会为您的模块生成报告。
为说明起见,这是一个简单的CMake文件,该文件仅生成covered.cxx
的覆盖率信息。请注意target_compile_options
库的额外target_link_libraries
和covered
。
add_executable(${PROJECT_NAME} main.cxx)
add_library(not-covered SHARED not-covered.cxx)
add_library(covered SHARED covered.cxx)
target_compile_options(covered PRIVATE --coverage)
target_link_libraries(covered PRIVATE --coverage)
target_link_libraries(${PROJECT_NAME} covered not-covered)