我正在尝试确定我的testcoverage。为此,我使用较新版本的gcc编译程序:
CC=/usr/local/gcc8/bin/gcc FC=/usr/local/gcc8/bin/gfortran ./configure.sh -external cmake -d
使用--coverage
选项进行编译后,我运行测试,并创建了*.gcda
,*.gcno
和*.o.provides.build
文件。如果我运行类似的内容:
> $ /usr/local/gcc8/bin/gcov slab_dim.f90.gcda [±develop ●]
File '/Local/tmp/fleur/cdn/slab_dim.f90'
Lines executed:0.00% of 17
Creating 'slab_dim.f90.gcov'
哪个告诉我,gcov运行正常。但是,如果我尝试对这些结果运行lcov:
lcov -t "result" -o ex_test.info -c -d CMakeFiles/
对于每个文件,我都会收到如下错误消息:
Processing fleur.dir/hybrid/gen_wavf.F90.gcda
/Local/tmp/fleur/build.debug/CMakeFiles/fleur.dir/hybrid/gen_wavf.F90.gcno:version 'A82*', prefer '408R'
/Local/tmp/fleur/build.debug/CMakeFiles/fleur.dir/hybrid/gen_wavf.F90.gcno:no functions found
geninfo: WARNING: gcov did not create any files for /Local/tmp/fleur/build.debug/CMakeFiles/fleur.dir/hybrid/gen_wavf.F90.gcda!
这与我使用系统标准/usr/bin/gcov
这使我相信lcov称为旧gcov,而不是新gcov。如何强制gcov使用新版本?
答案 0 :(得分:0)
$PATH
环境变量需要扩展/usr/local/gcc8/bin/
答案 1 :(得分:0)
由于使用/ usr / bin / gcov可以得到相同的结果,因此错误的原因很明显。 / usr / bin / gcov应该是从已安装的编译器指向二进制文件的链接,但是在您这种情况下,该链接并不指向gcc 8.2安装中的二进制文件。
您可以删除链接并重新创建该链接以指向正确的gcov,也可以设置诸如update-alternatives之类的内容来在更改默认编译器时更改gcov的版本。
如果您在/ usr / local / gcc8 / bin中有一个名为gcov的二进制文件,那么上一个答案也应该起作用,因为如果您将该路径添加到环境PATH中,则将首先选择它。