“正在生成代码覆盖率,但是无法更改将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有人可以帮我这个忙吗“
由于这需要进行大量工作,因此建议您不要这样做。但是无论如何,它就在这里:
您有三个“子问题”:
如何在另一个目录中创建
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。