In pre-processing mode GCC doesn&#39;t have target filename and has to guess target name for depfile.<div>Use -MT to force correct target name.<br><div><div><br>gcc -c -MMD -o foo.cc.o foo.cc      =&gt; foo.cc.o: &lt;dependencies&gt;<div>

gcc -E -MMD -o foo.i foo.cc         =&gt; foo.o: &lt;dependencies&gt;<br>gcc -E -MMD -MT foo.cc.o -o foo.i foo.cc         =&gt; foo.cc.o: &lt;dependencies&gt;</div><div><br>---<br> Modules/Compiler/GNU.cmake        |    2 +-<br>

 Source/cmNinjaTargetGenerator.cxx |    1 +<br> 2 files changed, 2 insertions(+), 1 deletion(-)<br><br>diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake<br>index bdcaf9d..2c70806 100644<br>--- a/Modules/Compiler/GNU.cmake<br>

+++ b/Modules/Compiler/GNU.cmake<br>@@ -30,7 +30,7 @@ macro(__compiler_gnu lang)<br>   # in try_compile mode.<br>   GET_PROPERTY(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE)<br>   if(NOT _IN_TC OR CMAKE_FORCE_DEPFILES)<br>-    set(CMAKE_DEPFILE_FLAGS_${lang} &quot;-MMD -MF &lt;DEPFILE&gt;&quot;)<br>

+    set(CMAKE_DEPFILE_FLAGS_${lang} &quot;-MMD -MT &lt;DEPTARGET&gt; -MF &lt;DEPFILE&gt;&quot;)<br>   endif()<br> <br>   # Initial configuration flags.<br>diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx<br>

index 8fa367f..991bf25 100644<br>--- a/Source/cmNinjaTargetGenerator.cxx<br>+++ b/Source/cmNinjaTargetGenerator.cxx<br>@@ -331,6 +331,7 @@ cmNinjaTargetGenerator<br>     depfile = &quot;$out.d&quot;;<br>     cmSystemTools::ReplaceString(depfileFlagsStr, &quot;&lt;DEPFILE&gt;&quot;,<br>

                                  depfile.c_str());<br>+    cmSystemTools::ReplaceString(depfileFlagsStr, &quot;&lt;DEPTARGET&gt;&quot;, &quot;$out&quot;);<br>     flags += &quot; &quot; + depfileFlagsStr;<br>   }<br>   vars.Flags = flags.c_str();<br>

-- <br>1.7.9.4<br></div></div></div></div>