1 前言

一般情况下,我们可以使用gcovr工具生成单元测试报告,该工具一般默认集成在GNU工具集中。

此前我们一般使用makefile通过增加--coverage来引入它,但在CMake中如何使用还不清楚,因此实现后做个总结。

2 步骤

2.1 修改CMakeLists.txt

2.1.1 设置Debug模式

首先需要确认一点,为了保证覆盖率展示全面,一般情况下需要避免开启编译优化。在CMake中便需要尽可能使用Debug模式。

一般情况会这么写:

OPTION(CMAKE_BUILD_TYPE "Build and Compile Type, Release/Debug" "Debug")

2.1.2 设置UT覆盖率选项

OPTION(ENABLE_COVERAGE "Use GCOVR" OFF) # 默认关闭
if(ENABLE_COVERAGE)
	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
endif()

2.2 构建与运行

构建运行部分与CMake-基于CTest实现单元测试描述基本一致:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_COVERAGE=ON ..
make -j
make test

需要注意的是,CMake下运行生成的.gcna.gcno和二进制文件、源码文件不在同一个位置,这里可以看官方文档说明:Cookbook — gcovr 7.2 documentation

我们需要使用以下命令来输出覆盖率:

cd build
gcovr -r ${SRC_CODE_DIR} .

即可在控制台输出覆盖率。