我很难获得gcov的覆盖信息.编译和链接期间没有错误,但是当我运行可执行文件时,不会生成任何覆盖数据.
我正在使用带有单独构建目录的CMake,以这种方式将标志传递给编译器和链接器:
add_definitions(--coverage)
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} " --coverage")
Run Code Online (Sandbox Code Playgroud)
可执行文件是否期望源代码位于特定位置?我需要添加什么来添加到我的CMakeLists.txt才能实现目标?
亲切的问候,Bjoern
del*_*her 12
CMake似乎将代码覆盖(*.gcda,*.gcdo)文件与项目的目标文件放在一起.如果您的可执行文件名为"tester",那么它们将出现在以下路径中
${CMAKE_BINARY_DIR}/CMakeFiles/tester.dir/
Run Code Online (Sandbox Code Playgroud)
CMake似乎以与gcov不兼容的方式命名源文件.例如,如果我有一个名为"mytestprog.cpp"的源文件,它将构建
mytestprog.cpp.o
mytestprog.cpp.gcda
mytestprog.cpp.gcdno
Run Code Online (Sandbox Code Playgroud)
gcov似乎期待的地方
mytestprog.gcda
mytestprog.gcdno
Run Code Online (Sandbox Code Playgroud)
我真的不确定如何解决它.我已经尝试过使用LCov而"出现"工作,但我不确定它是否确实如此.
Delcypher指出了这个问题.
解决方案1:您可以要求使用未记录的开关cmake
将对象文件命名为main.o
而不是main.cpp.o
等等CMAKE_CXX_OUTPUT_EXTENSION_REPLACE
:
cmake -DCMAKE_CXX_OUTPUT_EXTENSION_REPLACE=ON ...
Run Code Online (Sandbox Code Playgroud)
解决方案2:如果您不需要.gcov
可以lcov
从构建目录调用的文件:
lcov --capture --directory . --output-file coverage.info
genhtml coverage.info --output-directory out
Run Code Online (Sandbox Code Playgroud)
您将out
在html格式的目录中找到覆盖率信息.
不确定你--coverage
从哪里得到的,但这些是我在 Linux 上使用 gcc 和 gcov 获取覆盖率信息的参数:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
Run Code Online (Sandbox Code Playgroud)
以下是gcc --help --verbose
关于这些选项的说明:
-ftest-coverage 创建“gcov”所需的数据文件
-fprofile-arcs 插入基于弧的程序分析代码
归档时间: |
|
查看次数: |
10135 次 |
最近记录: |