فهرست منبع

Ninja: don't confuse ninja's rsp files with nmake's

Move response files into CMakeFiles/ which makes them different to nmake's.
Peter Kümmel 13 سال پیش
والد
کامیت
f1670ab18a
3فایلهای تغییر یافته به همراه17 افزوده شده و 5 حذف شده
  1. 9 3
      Source/cmGlobalNinjaGenerator.cxx
  2. 1 0
      Source/cmGlobalNinjaGenerator.h
  3. 7 2
      Source/cmNinjaNormalTargetGenerator.cxx

+ 9 - 3
Source/cmGlobalNinjaGenerator.cxx

@@ -106,6 +106,7 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
                                         const cmNinjaDeps& implicitDeps,
                                         const cmNinjaDeps& orderOnlyDeps,
                                         const cmNinjaVars& variables,
+                                        const std::string& rspfile,
                                         int cmdLineLimit)
 {
   // Make sure there is a rule.
@@ -181,12 +182,17 @@ void cmGlobalNinjaGenerator::WriteBuild(std::ostream& os,
 
   // check if a response file rule should be used
   std::string buildstr = build.str();
-  const std::string assignments = variable_assignments.str();
+  std::string assignments = variable_assignments.str();
   const std::string args = arguments.str();
   if (cmdLineLimit > 0
       && args.size() + buildstr.size() + assignments.size()
-         > (size_t) cmdLineLimit)
-    buildstr += "_RSPFILE";
+                                                    > (size_t) cmdLineLimit) {
+    buildstr += "_RSP_FILE";
+    variable_assignments.clear();
+    cmGlobalNinjaGenerator::WriteVariable(variable_assignments,
+                                          "RSP_FILE", rspfile, "", 1);
+    assignments += variable_assignments.str();
+  }
 
   os << buildstr << args << assignments;
 }

+ 1 - 0
Source/cmGlobalNinjaGenerator.h

@@ -84,6 +84,7 @@ public:
                          const cmNinjaDeps& implicitDeps,
                          const cmNinjaDeps& orderOnlyDeps,
                          const cmNinjaVars& variables,
+                         const std::string& rspfile = std::string(),
                          int cmdLineLimit = -1);
 
   /**

+ 7 - 2
Source/cmNinjaNormalTargetGenerator.cxx

@@ -153,7 +153,7 @@ cmNinjaNormalTargetGenerator
   cmTarget::TargetType targetType = this->GetTarget()->GetType();
   std::string ruleName = this->LanguageLinkerRule();
   if (useResponseFile)
-    ruleName += "_RSPFILE";
+    ruleName += "_RSP_FILE";
 
   // Select whether to use a response file for objects.
   std::string rspfile;
@@ -179,7 +179,7 @@ cmNinjaNormalTargetGenerator
         } else {
           responseFlag = "@";
         }
-        rspfile = "$out.rsp";
+        rspfile = "$RSP_FILE";
         responseFlag += rspfile;
         rspcontent = "$in $LINK_LIBRARIES";
         vars.Objects = responseFlag.c_str();
@@ -549,6 +549,10 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
   int commandLineLengthLimit = -1;
 #endif
 
+  const std::string rspfile = std::string
+                              (cmake::GetCMakeFilesDirectoryPostSlash()) +
+                              this->GetTarget()->GetName() + ".rsp";
+
   // Write the build statement for this target.
   cmGlobalNinjaGenerator::WriteBuild(this->GetBuildFileStream(),
                                      comment.str(),
@@ -558,6 +562,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
                                      implicitDeps,
                                      emptyDeps,
                                      vars,
+                                     rspfile,
                                      commandLineLengthLimit);
 
   if (targetOutput != targetOutputReal) {