diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 0cf2e5494b..39576414a6 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -738,8 +738,6 @@ std::string cmLocalGenerator::ExpandRuleVariable( std::map::iterator compIt = compilers.find(variable); - std::string replace = this->Makefile->GetSafeDefinition(variable); - if (compIt != compilers.end()) { std::string ret = this->ConvertToOutputForExisting( variableMappings["CMAKE_" + compIt->second + "_COMPILER"]); @@ -783,7 +781,6 @@ std::string cmLocalGenerator::ExpandRuleVariable( return ret; } - // loop over language specific replace variables for (const char* const* replaceIter = cmArrayBegin(ruleReplaceVars); replaceIter != cmArrayEnd(ruleReplaceVars); ++replaceIter) { for (std::vector::iterator i = enabledLanguages.begin(); @@ -793,15 +790,19 @@ std::string cmLocalGenerator::ExpandRuleVariable( if (actualReplace.find("${LANG}") != actualReplace.npos) { cmSystemTools::ReplaceString(actualReplace, "${LANG}", lang); } - if (actualReplace == variable) { - // if the variable is not a FLAG then treat it like a path - if (variable.find("_FLAG") == variable.npos) { - return this->ConvertToOutputForExisting(replace); - } - return replace; - } + + variableMappings[actualReplace] = + this->Makefile->GetSafeDefinition(actualReplace); } } + std::map::iterator mapIt = + variableMappings.find(variable); + if (mapIt != variableMappings.end()) { + if (variable.find("_FLAG") == variable.npos) { + return this->ConvertToOutputForExisting(mapIt->second); + } + return mapIt->second; + } return variable; }