[CMake] [PATCH] Correctly generate depfiles when some pre-processor (like distcc or ccache) is used

Alexander Usov a.s.usov at gmail.com
Wed Mar 14 08:00:24 EDT 2012


In pre-processing mode GCC doesn't have target filename and has to guess
target name for depfile.
Use -MT to force correct target name.

gcc -c -MMD -o foo.cc.o foo.cc      => foo.cc.o: <dependencies>
gcc -E -MMD -o foo.i foo.cc         => foo.o: <dependencies>
gcc -E -MMD -MT foo.cc.o -o foo.i foo.cc         => foo.cc.o: <dependencies>

---
Modules/Compiler/GNU.cmake        |    2 +-
Source/cmNinjaTargetGenerator.cxx |    1 +
2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake
index bdcaf9d..2c70806 100644
--- a/Modules/Compiler/GNU.cmake
+++ b/Modules/Compiler/GNU.cmake
@@ -30,7 +30,7 @@ macro(__compiler_gnu lang)
  # in try_compile mode.
  GET_PROPERTY(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE)
  if(NOT _IN_TC OR CMAKE_FORCE_DEPFILES)
-    set(CMAKE_DEPFILE_FLAGS_${lang} "-MMD -MF <DEPFILE>")
+    set(CMAKE_DEPFILE_FLAGS_${lang} "-MMD -MT <DEPTARGET> -MF <DEPFILE>")
  endif()

  # Initial configuration flags.
diff --git a/Source/cmNinjaTargetGenerator.cxx
b/Source/cmNinjaTargetGenerator.cxx
index 8fa367f..991bf25 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -331,6 +331,7 @@ cmNinjaTargetGenerator
    depfile = "$out.d";
    cmSystemTools::ReplaceString(depfileFlagsStr, "<DEPFILE>",
                                 depfile.c_str());
+    cmSystemTools::ReplaceString(depfileFlagsStr, "<DEPTARGET>", "$out");
    flags += " " + depfileFlagsStr;
  }
  vars.Flags = flags.c_str();
-- 
1.7.9.4
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20120314/7a463a4d/attachment.htm>


More information about the CMake mailing list