How does lcov decide when to use absolute paths versus relative paths?
I have an app
directory containing subdirectories for each of my product's shared libraries and subdirectories for several binaries. Something like this:
/home/user/app/libfoo/bar
/home/user/app/libfoo/baz
/home/user/app/libqux
/home/user/app/testsuite
/home/user/app/product
However, when run through lcov
and genhtml
, the directories are listed like this:
/home/user/app/libqux
/home/user/app/testsuite
/home/user/app/product
bar
baz
In other words, everything within one of my shared library directories uses a relative path, while everything else uses absolute paths. Why?
My invoction of lcov
and genhtml
is pretty straightforward:
cd ~/app
testsuite/run_tests
lcov --capture --directory . --output-file coverage.info --gcov-tool gcov-5 --no-external
genhtml coverage.info --output-directory coverage
This is the result of genhtml
's --prefix
feature.
-p prefix
--prefix prefix
Remove prefix from all directory names.
Because lists containing long filenames are difficult to read,
there is a mechanism implemented that will automatically try to
shorten all directory names on the overview page beginning with
a common prefix. By default, this is done using an algorithm
that tries to find the prefix which, when applied, will minimize
the resulting sum of characters of all directory names.
Use this option to specify the prefix to be removed by yourself.
In my case, the /home/user/app/libfoo
library hierarchy was involved enough that genhtml
decided it saved more characters by stripping that, rather than the more obvious approach of stripping /home/user/app
.
Passing an explicit --prefix /home/user/app
option fixes this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With