https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105238
--- Comment #6 from Esger Abbink <esgergn at hotmail dot com> --- After patching ccache 4.5.1 to understand -fprofile-prefix-map it does cache .o and .gcno: $ ccache -z -C $ cd /home/esger/src/application/coverage_test/dir1/source/ && CCACHE_DEBUG= CCACHE_BASEDIR=/home/esger/src/application/coverage_test/dir1 ccache /usr/bin/g++-9.4p --coverage -fprofile-prefix-map=/home/esger/src/application/coverage_test/dir1=. -fdebug-prefix-map=/home/esger/src/application/coverage_test/dir1=. -c /home/esger/src/application/coverage_test/dir1/source/main.cpp $ ccache -s Summary: Hits: 0 / 1 (0.00 %) Direct: 0 / 1 (0.00 %) Preprocessed: 0 / 1 (0.00 %) Misses: 1 Direct: 1 Preprocessed: 1 Primary storage: Hits: 0 / 2 (0.00 %) Misses: 2 Cache size (GB): 0.00 / 5.00 (0.00 %) Cleanups: 4 $ cd /home/esger/src/application/coverage_test/dir2/source/ && CCACHE_DEBUG= CCACHE_BASEDIR=/home/esger/src/application/coverage_test/dir2 ccache /usr/bin/g++-9.4p --coverage -fprofile-prefix-map=/home/esger/src/application/coverage_test/dir2=. -fdebug-prefix-map=/home/esger/src/application/coverage_test/dir2=. -c /home/esger/src/application/coverage_test/dir2/source/main.cpp $ ccache -s Summary: Hits: 1 / 2 (50.00 %) Direct: 1 / 2 (50.00 %) Preprocessed: 0 / 1 (0.00 %) Misses: 1 Direct: 1 Preprocessed: 1 Primary storage: Hits: 2 / 4 (50.00 %) Misses: 2 Cache size (GB): 0.00 / 5.00 (0.00 %) Cleanups: 4 Using the cached .o/.gcno also generates a gcda in the correct location: $ cd /home/esger/src/application/coverage_test/dir2/source/ && CCACHE_DEBUG= CCACHE_BASEDIR=/home/esger/src/application/coverage_test/dir2 ccache /usr/bin/g++-9.4p --coverage -fprofile-prefix-map=/home/esger/src/application/coverage_test/dir2=. -fdebug-prefix-map=/home/esger/src/application/coverage_test/dir2=. main.o -o ../bin/a.out $ cd /home/esger/src/application/coverage_test/dir2 && ./bin/a.out $ ls source/ main.cpp main.gcda main.gcno main.o $ gcovr --html coverage.html . [ coverage report OK ] Though the gcno of source still contains a wrong CWD: $ gcov-dump-9.4p source/main.gcno |more main.gcno:note:magic `gcno':version `A94*' main.gcno:stamp 761679940 main.gcno:cwd: /home/esger/src/application/coverage_test/dir1/source main.gcno: 01000000: 20:FUNCTION ident=1826217343, lineno_checksum=0x36a9d8e5, cfg_checksum=0xc0bbb23e, `_GLOBAL__sub_I__Z5funcAi' main.cpp:21:1-21:1, artificial main.gcno: 01410000: 1:BLOCKS 4 blocks main.gcno: 01430000: 3:ARCS 1 arcs main.gcno: 01430000: 5:ARCS 2 arcs main.gcno: 01430000: 3:ARCS 1 arcs main.gcno: 01450000: 9:LINES main.gcno: 01450000: 9:LINES ... Not sure though what (negative) impact that will/could have?