While preprocessing ccache adds -E to the command line options but does not eliminate the -c so the command line looks like cc -c -E input.c For gcc this is ok as it groks -c and -E together, but other compilers consider -c and -E as conflicting as -c means compile to object and -E stop after cpp. if -c is eliminated things still work for gcc gcc -E input.c gives the same output as gcc -c -E input.c
This was fixed in f0db645c75a2c063526685b791a4afd7b2884d1d (not yet in any released ccache version).
Included in v3.2.