我想用gcovr(或gcov/lcov(评测的程序位于共享文件系统上,以及编译该程序的构建目录,我有多个工作程序,我打算用它们并行测试我的程序。为了解决竞争条件问题(worker将all运行我的程序,因此all在共享文件系统的同一位置生成名称相同的gcda文件(,我将gcda文件重定向到每个worker上的一个单独的目标目录(如这里所述(,并且我一直在运行以下命令:
gcovr -v -r /absolute/path/to/root --html --html-details -o test-details.html --object-directory=/absolute/path/to/object/dir /absolute/path/to/gcda/dir
其中最后一个路径是这里描述的search_paths
。我希望它在/absolute/path/to/root
中查找程序源,在/absolute/path/to/object/dir
中查找.o文件,在/absolute/path/to/gcda/dir
中查找gcda文件。然而,我用-v
运行了它,我看到gcovr正在从根目录以这种形式运行gcov命令
gcov /absolute/path/to/gcda/dir/file.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /absolute/path/to/gcda/dir
同样,我希望它以以下形式运行(查看--object目录路径(:
gcov /absolute/path/to/gcda/dir/file.gcda --branch-counts --branch-probabilities --preserve-paths --object-directory /absolute/path/to/object/dir
它在像后一个命令一样运行时表现正常,但gcovr运行的是前者。我只使用gcovr而不是gcov,因为我有一个大项目(我知道gcovr是基于lcov构建的(。有人知道它为什么会这样吗?(这是它应该运行的方式吗?(我如何才能让它按照我想要的方式运行?提前感谢!
这是在GitHub上交叉发布到gcovr问题跟踪器的,下面是摘要:
Gcovr目前期望.gcda和.gcno文件紧挨着(通常是这样(。搜索路径会影响gcovr搜索这些文件的位置。--object目录只为搜索路径提供了一个默认值,但在这里您已经用显式搜索路径覆盖了它。gcovr--object directory选项不会传递到gcov--object目录选项。
截至gcovr 4.1,没有解决此问题的选项。您必须将.gcno文件从构建目录复制到每个包含覆盖率数据的目录中。或者,您可以手动运行gcov,然后使用gcovr -g ...
聚合.gcov文件。
附加说明:
- gcov对.o对象文件不感兴趣,只对.gcda文件(在测试执行期间编写(和.gcno文件(在编译期间编写(感兴趣
- gcovr和lcov没有直接关系