فهرست منبع

Ninja: add dependency tracking for msvc with cldeps

Peter Kuemmel 13 سال پیش
والد
کامیت
1d40729eaa
1فایلهای تغییر یافته به همراه10 افزوده شده و 2 حذف شده
  1. 10 2
      Source/cmNinjaTargetGenerator.cxx

+ 10 - 2
Source/cmNinjaTargetGenerator.cxx

@@ -330,12 +330,17 @@ cmNinjaTargetGenerator
   vars.Defines = "$DEFINES";
   vars.TargetPDB = "$TARGET_PDB";
 
+  bool cldeps = false;
+  const char* cc = this->GetMakefile()->GetDefinition("CMAKE_C_COMPILER");
+  if(cc && std::string(cc).find("cl.exe") != std::string::npos)
+    cldeps = true;
+
   std::string depfile;
   std::string depfileFlagsName = "CMAKE_DEPFILE_FLAGS_" + language;
   const char *depfileFlags =
     this->GetMakefile()->GetDefinition(depfileFlagsName.c_str());
-  if (depfileFlags) {
-    std::string depfileFlagsStr = depfileFlags;
+  if (depfileFlags || cldeps) {
+    std::string depfileFlagsStr = depfileFlags ? depfileFlags : "";
     depfile = "$out.d";
     cmSystemTools::ReplaceString(depfileFlagsStr, "<DEPFILE>",
                                  depfile.c_str());
@@ -364,6 +369,9 @@ cmNinjaTargetGenerator
   std::string cmdLine =
     this->GetLocalGenerator()->BuildCommandLine(compileCmds);
 
+  if(cldeps)
+      cmdLine = "cldeps.exe $out.d $out " + cmdLine;
+
   // Write the rule for compiling file of the given language.
   std::ostringstream comment;
   comment << "Rule for compiling " << language << " files.";