Compute C dependencies as GCC intended
C dependencies are intended to be computed as a side-effect of compiling
a C file, not necessarily as a separate step. Compiling a C file with
GCC or clang is now responsible for directly creating the .d dependency
file, if dependencies are being computed. The workaround for MSVC now
becomes two calls to the C compiler, firstly to cl, to compile the file,
then to GCC to create the dependency information. This does the same
work as before, but with the calls in a different order.
Computing dependencies this way allows us to avoid re-checking the C
dependencies on every single invocation of make. If .d files are found,
then they are loaded. On first invocationm, neither the .o or the .d
file will exist, so make knows that the object needs rebuilding without
needing to compute the dependencies of it first.