我正在两个系统(Windows 7,cygwin,Lcov 1.10)上分析带有LCOV的C代码.在一个系统上,我从来没有遇到过问题,但在另一个系统上我得到了相同的代码:
$ lcov --directory CMakeFiles/UnitTest.dir/main --capture --output-file lcov.log
Capturing coverage data from CMakeFiles/UnitTest.dir/main
Found gcov version: 4.8.2
Scanning CMakeFiles/UnitTest.dir/main for .gcda files ...
Found 59 data files in CMakeFiles/UnitTest.dir/main
Processing analyze/analyze.c.gcda
[..]
Processing measure/measur.c.gcda
geninfo: Negative length at /usr/bin/geninfo line 2413.
Run Code Online (Sandbox Code Playgroud)
在两个系统上,文件夹和文件是相同的(通过subversion版本控制).我想,也许某些路径可能存在问题.有人知道这是关于什么的吗?谢谢,领导
附录:我发现有些时候它有助于彻底清理项目(删除所有CMakeFiles和CMakeCache)并重新运行lcov命令.
在我项目的任何子目录中,应该可以在任何地方创建一个名为“ hide”的目录,并在其中放置一些代码文件(.c,.cpp,.h,...)。CMake将忽略那些文件。我该如何实现?有任何简单方法的建议吗?在网上搜索,但找不到解决方案。
我试过的
file(GLOB_RECURSE SOURCE_FILES "*.cpp" "*.c")
file(GLOB_RECURSE REMOVE_SOURCES
"*/hide/*"
"${PROJECT_SOURCE_DIR}/CMakeFiles/*"
"*main.c")
file(GLOB_RECURSE REMOVE_SOURCES "*/hide/*")
list(REMOVE_ITEM SOURCE_FILES ${REMOVE_SOURCES})
Run Code Online (Sandbox Code Playgroud)
如果目录路径已知(如“ CMakeFiles”目录)或文件已知(如“ main.c”文件),则第二行工作正常。但是,如果字符串中有两个“ *”,则它不起作用。我找不到位于某处的目录的简单解决方案。
然后我尝试使用REGEX。
file(GLOB_RECURSE SOURCE_FILES "*.cpp" "*.c")
string(REGEX REPLACE ";.*/hide/.*;" ";" FOO ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)
因为源文件列表用分号分隔,所以如果其中包含字符串“ hide”,则上面的行应将字符串从一个分号删除到另一个分号。该表达式似乎对分号有问题。使用任何分号会使命令一无所获。
我尝试了一些foreach循环,但无法获得所有“隐藏”目录的列表。