https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89961
--- Comment #5 from Cristian Morales Vega <christian.morales.vega at gmail dot com> --- OK, trying to catch you here, from my gcc-8.3.1. So with gcc 9 "--intermediate-format" is gone and we now have "--json-format" (keeping the "-i" version)? The "--intermediate-format" documentation used to say "can be used by lcov or other tools". I guess the lcov devs know about this, but aren't the devs of "other tools" going to be cross? I mean, I was suggesting to cmake to use "--intermediate-format" (https://gitlab.kitware.com/cmake/cmake/issues/19124#note_554428)... now they would need to support two formats to be able to support different gcov versions. In any case I'm unsure how "current_working_directory" or "data_file" help with the cmake case. The problem is that cmake is going to call gcov once and it's going to create /tmp/error.cpp.gcda.gcov.json.gz with whatever contents, based on what CMakeFiles/<cmake_target_name1>.dir/src/error.cpp.gcda says. Then it's going to call gcov again, it's going to overwrite/destroy the /tmp/error.cpp.gcda.gcov.json.gz file created one second ago, and in its place is going to create a new /tmp/error.cpp.gcda.gcov.json.gz file based on what test/CMakeFiles/<cmake_target_name2>.dir/error.cpp.gcda says. So all the information contained on CMakeFiles/<cmake_target_name1>.dir/src/error.cpp.gcda gets lost. Sure, cmake could put the files in different directories to avoid overwriting them, but it doesn't. And if cmake could do "-x -i" I would end up with two files: /tmp/error.cpp.gcda##3626990101906c77dbd16dea3f1aab07.gcov.json.gz /tmp/error.cpp.gcda##39f7c940c3bc30bbedebd034d8c16a68.gcov.json.gz and so no information would be lost.