如何使用GCOV_PREFIX移动gcno文件和如何移动gcda文件?

问题描述 投票:-3回答:1

“正在生成代码覆盖率,但是无法更改将gcda文件保存到的目录”

“已尝试GCOV_PREFIX”,但没有响应

“ / home / user / rock纳米1.cgcc -fprofile-arcs -ftest-coverage 1.c这将创建1.gcno和a.out执行a.out将在当前目录中创建1.gcda,但是我想将.gcno和a.out和.gcda更改为另一个目录/ home / user / john有人可以帮我这个忙吗“

c gcov
1个回答
0
投票

由于这需要进行大量工作,因此建议您不要这样做。但是无论如何,它就在这里:


您有三个“子问题”:

如何在另一个目录中创建a.out

目标目录必须存在。然后在编译和链接命令上使用选项-o

gcc -fprofile-arcs -ftest-coverage 1.c -o /home/user/john/a.out

如果愿意,您甚至可以更改可执行文件的名称。这很普遍。 ; - )

如何在另一个目录中创建1.gcno

此文件需要移动,因为它是在源文件旁边生成的。在un * x(Linux)上,您通常使用:

mv 1.gcno /home/user/john

确保目标目录之前存在。

如何在另一个目录中创建1.gcda

直接来自手册:

例如,如果目标文件/user/build/foo.o是使用-fprofile-arcs构建的,则最终的可执行文件将在目标系统上运行时尝试创建数据文件/user/build/foo.gcda。如果相应的目录不存在并且无法创建它,它将失败。例如,可以通过将环境设置为“ GCOV_PREFIX = / target / run”和“ GCOV_PREFIX_STRIP = 1”来解决此问题。这样的设置会将数据文件命名为/target/run/build/foo.gcda。

假定构建目录为/home/user/jane/test。 GCOV_PREFIX_STRIP变量将从给定的构建路径中删除尽可能多的目录。我们需要4:“ home”,“ user”,“ jane”和“ test”。然后,GCOV_PREFIX变量将给定路径放在其余路径的前面:

GCOV_PREFIX=/home/user/john GCOV_PREFIX_STRIP=4 /home/user/john/a.out

现在,如果您尝试生成带注释的源文件1.c.gcov,则会发现该文件将在1.c之外创建。您还需要将此文件移动到目标目录,例如.gcno文件。请阅读gcov的文档以了解更多选项。不幸的是,似乎没有选项可以重定位输出,并且gcov似乎没有使用GCOV_PREFIX和GCOV_PREFIX_STRIP。

© www.soinside.com 2019 - 2024. All rights reserved.