【发布时间】:2020-06-22 21:56:58
【问题描述】:
我有一个包含大量源文件的项目。然后将它们编译为.o 对象,最后与main.o 链接以生成main.exe。我正在使用 gcc 使用 --coverage -O0 编译所有文件(source1.c、source2.c、main.c),为每个文件生成 .o 和 .gcno。然后,我将所有内容链接在一起并调用main.exe,再次为每个目标文件生成.gcda 文件。
当我运行gcov source1.o source2.o main.o 时收到警告?错误?每个函数两次:
./tests/source1.gcno:'build' has arcs to entry block
./tests/source1.gcno:'build' has arcs from exit block
问题在于,这会使终端充满这些消息并且需要很长时间才能完成。我在 SO 中只能找到 this,所以我检查了 gcc 和 gcov 的版本:
$ gcc --version
gcc.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ gcov --version
gcov (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.
然而,这个问题对我帮助不大。我正在使用安装了巧克力的 MinGW-w64。我在互联网上也找不到任何使用 gcov 和多个源文件的示例,因此标题。
我不知道到底出了什么问题,因为我已经被这个问题困扰了一个星期了。我的项目确实运行并产生了代码覆盖率,但是这些成千上万的警告使我的 CI 消息过长。
另外,如果有人能更好地解释警告消息的含义,我将不胜感激。
编辑:
我用来编译main.c的标志示例:
gcc -Wall -Werror --coverage -O0 -lgcov -I ./tests/include -I ./src -c ./tests/main.c -o ./tests/build/main.o
【问题讨论】: