我只有一个test.cpp文件,其中有main函数,我应该怎么写cmakelists,进行gcov和lcov的覆盖率测试
时间: 2024-04-30 17:20:07 浏览: 170
首先,你需要安装gcov和lcov工具。然后,你可以按照以下步骤进行操作:
1. 在test.cpp文件所在的目录下创建一个名为"CMakeLists.txt"的文件。
2. 在"CMakeLists.txt"文件中,添加以下内容:
```
cmake_minimum_required(VERSION 3.10)
project(Test)
set(CMAKE_CXX_STANDARD 11)
add_executable(test test.cpp)
target_compile_options(test PRIVATE --coverage)
target_link_libraries(test PRIVATE gcov)
add_custom_target(coverage
COMMAND ${CMAKE_COMMAND} -E environment "GCOV_PREFIX=./" "GCOV_PREFIX_STRIP=0"
${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} gcov -b -c ${CMAKE_SOURCE_DIR}/test.cpp
COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} lcov --capture --directory . --output-file coverage.info
COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} lcov --remove coverage.info '/usr/*' "${CMAKE_BINARY_DIR}/*" --output-file coverage.info
COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} lcov --list coverage.info
)
```
这个CMakeLists.txt定义了一个名为Test的项目,并将test.cpp编译为可执行文件test。编译选项--coverage允许生成代码覆盖信息。target_link_libraries指定链接gcov库。
add_custom_target添加一个名为“coverage”的自定义目标,该目标使用环境变量设置gcov生成代码覆盖信息。使用lcov收集覆盖信息,将其保存在coverage.info文件中,并且从输出中删除一些不必要的信息。
3. 在终端中进入test.cpp所在的目录,创建一个build目录。
```
mkdir build && cd build
```
4. 运行cmake命令。
```
cmake ..
```
5. 运行make命令,生成可执行文件test。
```
make
```
6. 运行test。
```
./test
```
7. 运行覆盖率测试。
```
make coverage
```
执行这个命令将生成一个名为coverage.info的文件,其中包含了test.cpp文件的代码覆盖率信息。你可以使用lcov或genhtml工具生成HTML格式的报告。
```
lcov --list coverage.info
genhtml coverage.info --output-directory coverage-report
```
打开coverage-report目录下的index.html文件,你就可以看到代码覆盖率报告了。
阅读全文