If you do lazy `-include *.d` there no time wasted for `-MMD` since it only runs as part of your main compile.
The only "gotcha" is if you delete a header but you forgot to give GCC the option that says "I might delete a header in future".
Oooh, there is an "-MP" flag, which does... something? Anyway, it's all just a gigantic hack at this point: if we defer to gcc to figure out the accurate dependencies anyway, why do we even use make in the first place? I mean, I know the answer ("that's how it came to be, historically"), it just rubs me the wrong way since gcc, strictly speaking, is already a compiler driver that orchestrates running the internal utilities so it may as well just bloody learn how to run them all in one swell foop or whatever.
And when you change flags/compiler versions/system header versions you still need to a clean rebuild, so unless you write your makefiles the way that e.g. CMake generates them (I am willing to bet nobody does that)...