Write output to file. This is the same as specifying file as the second non-option argument to cpp.
gcc has a different interpretation of a second non-option argument, so you must use -o to specify the
-MD-MD is equivalent to -M-MFfile, except that -E is not implied. The driver determines file based on
whether an -o option is given. If it is, the driver uses its argument but with a suffix of .d,
otherwise it takes the name of the input file, removes any directory components and suffix, and
applies a .d suffix.
If -MD is used in conjunction with -E, any -o switch is understood to specify the dependency output
file, but if used without -E, each -o is understood to specify a target object file.