Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将gcov与cmake一起使用时未创建.gcda文件_Cmake_Gcov - Fatal编程技术网

将gcov与cmake一起使用时未创建.gcda文件

将gcov与cmake一起使用时未创建.gcda文件,cmake,gcov,Cmake,Gcov,我将gcov与cmake一起使用。所有的旗子都设置正确。没有正确创建任何文件。但是,在执行从源文件生成的可执行文件时,情况有点复杂。可执行文件在bash脚本中运行 让我创建一个示例场景,以便您可以给我准确的答案 我有一个名为MY_file.CC的文件,其可执行文件名为executable_file 我使用cmake为gcov设置了所有标志。 我有一个名为_script.SH的脚本,它将与“make test”一起运行。此脚本运行可执行文件 因此,这里的想法是bash脚本(_SCRIPT.SH)依

我将gcov与cmake一起使用。所有的旗子都设置正确。没有正确创建任何文件。但是,在执行从源文件生成的可执行文件时,情况有点复杂。可执行文件在bash脚本中运行

让我创建一个示例场景,以便您可以给我准确的答案

我有一个名为MY_file.CC的文件,其可执行文件名为executable_file 我使用cmake为gcov设置了所有标志。 我有一个名为_script.SH的脚本,它将与“make test”一起运行。此脚本运行可执行文件

因此,这里的想法是bash脚本(_SCRIPT.SH)依次运行可执行文件(可执行文件),而运行这些bash脚本不会创建.GCDA文件。当我直接/手动运行可执行文件时,会创建.GCDA文件。我相信bash脚本是在子shell中运行的,父shell无法知道源代码的可执行文件是否已运行。有人能确认一下情况是否属实吗?如果没有,那么确切的问题是什么?如果是,那么这个问题的解决方案是什么

非常感谢

这可能与您的问题有关


也许您可以提供更多关于标志、项目目录结构等的详细信息。

我这里有一个正在运行的gcov cmake集成。如果您的gcda文件是在直接启动prog时生成的,那么在这两种情况下启动程序时,您是否可以检查当前的工作目录?当通过脚本启动时,您的exec可能没有当前工作目录的写入权限。我有一个非常类似的问题。我试图通过CMake POST_BUILD自定义命令运行单元测试,同时收集覆盖率。测试脚本运行,测试可执行文件运行正常,但不生成.gcda文件。我相信这不是权限问题,因为测试脚本能够使用“touch”创建与预期的.gcda文件具有相同名称和位置的文件,没有问题。CMake用来启动测试二进制文件的环境中一定有一些东西是gcov不同意的。。。但我不确定这可能是什么。值得一提的是:在CMake之外运行测试脚本会生成.gcda文件,没有任何问题;但在CMake内部:没有骰子。而且,在“make test”下运行时,不会生成.gcda文件。。。所以它可能是make而不是CMake…?您是否尝试过直接执行
SCRIPT.SH
文件?我以前看过这个问题,遗憾的是,它与此无关。我正在使用正确的标志进行编译(我可以生成.gcno&gcda文件,OK),它们最终会出现在预期的目录中。我有一个结构有点复杂的源代码外构建树,但文件最终位于正确的位置,gcov和lcov能够正常处理它们。正如我之前提到的——我认为我在上周测试时做了一些愚蠢的事情;也许是无意中运行了一些清理代码,因为我现在让系统按预期工作。无论如何,我会给你奖金,谢谢,因为你花了时间在可能是白费力气的事情上。