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} .
即可在控制台输出覆盖率。