【问题标题】:How to move gcno files and how to move gcda files by using GCOV_PREFIX?如何移动 gcno 文件以及如何使用 GCOV_PREFIX 移动 gcda 文件?
【发布时间】:2020-01-30 08:50:27
【问题描述】:

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

“已尝试 GCOV_PREFIX”但没有响应

"/home/user/rock
纳米 1.c
gcc -fprofile-arcs -ftest-coverage 1.c 这将创建 1.gcno 和 a.out
执行 a.out 将在当前目录中创建 1.gcda 但我想将 .gcno 和 a.out 和 .gcda 更改为另一个目录 /home/user/john 谁能帮我解决这个问题”

【问题讨论】:

    标签: c gcov


    【解决方案1】:

    因为这需要做很多工作,所以我建议您不要这样做。但无论如何,它是这样的:


    你有三个“子问题”:

    如何在另一个目录中创建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。

    【讨论】:

    • 感谢您的回复..但这对我来说不是很清楚...请您简要解释一下
    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 2016-09-06
    • 2010-09-29
    • 2023-03-17
    • 2019-07-08
    • 2010-09-07
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多