소스 검색

Ninja: also consider variables when checking command line length

Peter Kuemmel 13 년 전
부모
커밋
0c42faf63a
2개의 변경된 파일21개의 추가작업 그리고 20개의 파일을 삭제
  1. 20 19
      Source/cmGlobalNinjaGenerator.cxx
  2. 1 1
      Source/cmLocalNinjaGenerator.cxx

+ 20 - 19
Source/cmGlobalNinjaGenerator.cxx

@@ -160,34 +160,35 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
 
   arguments << "\n";
 
-
-  cmOStringStream builds;
+  cmOStringStream build;
 
   // Write outputs files.
-  builds << "build";
+  build << "build";
   for(cmNinjaDeps::const_iterator i = outputs.begin();
-      i != outputs.end();
-      ++i)
-    builds << " " << EncodeIdent(EncodePath(*i), os);
-  builds << ":";
-
+      i != outputs.end(); ++i)
+    build << " " << EncodeIdent(EncodePath(*i), os);
+  build << ":";
 
   // Write the rule.
-  builds << " " << rule;
+  build << " " << rule;
+
+  // Write the variables bound to this build statement.
+  cmOStringStream variable_assignments;
+  for(cmNinjaVars::const_iterator i = variables.begin();
+      i != variables.end(); ++i)
+    cmGlobalNinjaGenerator::WriteVariable(variable_assignments,
+                                          i->first, i->second, "", 1);
 
   // check if a response file rule should be used
+  std::string buildstr = build.str();
+  const std::string assignments = variable_assignments.str();
   const std::string args = arguments.str();
-  if (cmdLineLimit > 0 &&
-       (args.size() + + builds.str().size()) > (size_t)cmdLineLimit)
-    builds << "_RSPFILE";
-
-  os << builds.str() << args;
+  if (cmdLineLimit > 0
+      && args.size() + buildstr.size() + assignments.size()
+         > (size_t) cmdLineLimit)
+    buildstr += "_RSPFILE";
 
-  // Write the variables bound to this build statement.
-  for(cmNinjaVars::const_iterator i = variables.begin();
-      i != variables.end();
-      ++i)
-    cmGlobalNinjaGenerator::WriteVariable(os, i->first, i->second, "", 1);
+  os << buildstr << args << assignments;
 }
 
 void cmGlobalNinjaGenerator::WritePhonyBuild(std::ostream& os,

+ 1 - 1
Source/cmLocalNinjaGenerator.cxx

@@ -272,7 +272,7 @@ std::string cmLocalNinjaGenerator::BuildCommandLine(
   // don't use POST_BUILD.
   if (cmdLines.empty())
 #ifdef _WIN32
-    return "cd.";
+    return "cd .";
 #else
     return ":";
 #endif