【发布时间】:2017-06-15 15:42:49
【问题描述】:
在 CMake 测试配置中,我添加了标志来生成代码覆盖率
IF( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
"${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage")
SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage ")
endif()
每次我运行测试时 - 我的输出都会包含这些消息:
分析:/xxxx/xxxxxj/projects/build-xxxxx-CLang-Debug/tests/CMakeFiles/xxxxxxxxxxxxxt_ut.dir/tests/gui/ship_design/ut_ship_stats_header.cpp.gcda:无法合并以前的 GCDA 文件:计数器数量不匹配(14)
简介: /xxxx/xxxxxx/projects/build-xxxxxxxxxxxxxxx-CLang-Debug/tests/CMakeFiles/xxxxxxxxxxxxxxx_ut.dir/tests/gui/ship_design/ut_ship_stats_header.cpp.gcda: 无法合并以前的 GCDA 文件:损坏的 arc 标记 (0x2b8e100f)
简介: /xxxx/xxxxxx/projects/build-xxxxxxxxxxxxxxx-CLang-Debug/tests/CMakeFiles/xxxxxxxxxxxxxxx_ut.dir/tests/ut_generate_hex_path.cpp.gcda: 无法合并以前的 GCDA 文件:损坏的 arc 标记 (0x65646f6e)
我不必说这至少会使读取测试运行结果变得困难。当我删除之前生成的所有 gcda 文件时,上述问题消失了。所以有两种可能的解决方案。
- 我可能会错过一些有价值的代码覆盖数据配置(即调用 lcov --zerocounters
FIND_PROGRAM(LCOV_PATH lcov)
命令 ${LCOV_PATH} -z --directory ${PROJECT_BINARY_DIR}}
- 我需要在提交测试运行之前添加自定义目标以删除所有 gcda 文件。
我应该如何解决这个问题?
【问题讨论】:
-
在编译源代码之前清除 *.gcda 文件
-
quote “当我删除之前生成的所有 gcda 文件时,上述问题消失了”。然而,问题在另一个链接和测试运行中重复出现。问题是 - 如何修改 CMake 或其他系统以使其自动化。
标签: c++ cmake code-coverage gcov