diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx index 6e08bcace..613c7b5b8 100644 --- a/Source/cmNinjaNormalTargetGenerator.cxx +++ b/Source/cmNinjaNormalTargetGenerator.cxx @@ -219,6 +219,7 @@ std::vector cmNinjaNormalTargetGenerator ::ComputeLinkCmd() { + std::vector linkCmds; cmTarget::TargetType targetType = this->GetTarget()->GetType(); switch (targetType) { case cmTarget::STATIC_LIBRARY: { @@ -230,7 +231,8 @@ cmNinjaNormalTargetGenerator if (const char *linkCmd = this->GetMakefile()->GetDefinition(linkCmdVar.c_str())) { - return std::vector(1, linkCmd); + cmSystemTools::ExpandListArgument(linkCmd, linkCmds); + return linkCmds; } } @@ -249,7 +251,7 @@ cmNinjaNormalTargetGenerator linkCmdVar += "_ARCHIVE_CREATE"; const char *linkCmd = this->GetMakefile()->GetRequiredDefinition(linkCmdVar.c_str()); - linkCmds.push_back(linkCmd); + cmSystemTools::ExpandListArgument(linkCmd, linkCmds); } { std::string linkCmdVar = "CMAKE_"; @@ -257,7 +259,7 @@ cmNinjaNormalTargetGenerator linkCmdVar += "_ARCHIVE_FINISH"; const char *linkCmd = this->GetMakefile()->GetRequiredDefinition(linkCmdVar.c_str()); - linkCmds.push_back(linkCmd); + cmSystemTools::ExpandListArgument(linkCmd, linkCmds); } return linkCmds; } @@ -281,7 +283,8 @@ cmNinjaNormalTargetGenerator } const char *linkCmd = this->GetMakefile()->GetRequiredDefinition(linkCmdVar.c_str()); - return std::vector(1, linkCmd); + cmSystemTools::ExpandListArgument(linkCmd, linkCmds); + return linkCmds; } default: assert(0 && "Unexpected target type"); diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index c776fcf40..d0b415611 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -334,8 +334,15 @@ cmNinjaTargetGenerator compileCmdVar += "_COMPILE_OBJECT"; std::string compileCmd = this->GetMakefile()->GetRequiredDefinition(compileCmdVar.c_str()); + std::vector compileCmds; + cmSystemTools::ExpandListArgument(compileCmd, compileCmds); - this->GetLocalGenerator()->ExpandRuleVariables(compileCmd, vars); + for (std::vector::iterator i = compileCmds.begin(); + i != compileCmds.end(); ++i) + this->GetLocalGenerator()->ExpandRuleVariables(*i, vars); + + std::string cmdLine = + this->GetLocalGenerator()->BuildCommandLine(compileCmds); // Write the rule for compiling file of the given language. std::ostringstream comment; @@ -343,7 +350,7 @@ cmNinjaTargetGenerator std::ostringstream description; description << "Building " << language << " object $out"; this->GetGlobalGenerator()->AddRule(this->LanguageCompilerRule(language), - compileCmd, + cmdLine, description.str(), comment.str(), depfile);