|
|
@@ -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,
|