我正在使用类似于以下结构的C ++项目:
--- /src
|--comms
|--utils
|--interfaces
…
CMakeList.txt
--- /test
|---test1/
|--main.cpp
|--CMakelists.txt
--CMakeLists.txt
我确实需要控制测试的覆盖范围,为此我用这种方式使用GCOV和LCOV:
SET(CMAKE_CXX_FLAGS "-g -O0 -Wall -fprofile-arcs -ftest-coverage")
SET(CMAKE_C_FLAGS "-g -O0 -Wall -W -fprofile-arcs -ftest-coverage")
SET(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")
.gcda
文件。
此时,文件gcno和gcda与相应的.o
文件位于同一目录中。我无法移动这些文件,因为如果我这样做,报告覆盖率生成就不起作用了。.gcno
和.gcda
所在的目录中,我执行以下操作:
lcov –c –d . –o name.info
genhtml name.info.
当我编译我的项目时,我有重复的.gcno
文件,因为在编译测试时,他们需要重新编译它们的依赖项(comms,utils,...),因为我没有为这些依赖项生成库。如果我不使用库,我认为没有办法避免这种情况。
但是,当我尝试为全局项目生成index.html
(覆盖率报告)时,它不起作用。
我使用Shell脚本创建项目的相同文件夹结构,并将每个.gcno
和.gcda
复制到相应的目录。我执行命令lcov
和genhtml
,然而index.html
不包括所有项目的覆盖范围。
我将不胜感激任何帮助。
尝试将--ignore-errors
与genhtml命令放在一起:
genhtml -o out name.info --ignore-errors source