diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx index b7f679755..98caec2e2 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.cxx +++ b/Source/cmGlobalUnixMakefileGenerator3.cxx @@ -680,17 +680,17 @@ cmGlobalUnixMakefileGenerator3 cmTargets& targets = lg->GetMakefile()->GetTargets(); for(cmTargets::iterator t = targets.begin(); t != targets.end(); ++t) { - if((t->second.GetType() == cmTarget::EXECUTABLE) || - (t->second.GetType() == cmTarget::STATIC_LIBRARY) || - (t->second.GetType() == cmTarget::SHARED_LIBRARY) || - (t->second.GetType() == cmTarget::MODULE_LIBRARY) || - (t->second.GetType() == cmTarget::UTILITY)) + // Don't emit the same rule twice (e.g. two targets with the same + // simple name) + if(t->second.GetName() && + strlen(t->second.GetName()) && + emitted.insert(t->second.GetName()).second) { - // Don't emit the same rule twice (e.g. two targets with the same - // simple name) - if(t->second.GetName() && - strlen(t->second.GetName()) && - emitted.insert(t->second.GetName()).second) + if((t->second.GetType() == cmTarget::EXECUTABLE) || + (t->second.GetType() == cmTarget::STATIC_LIBRARY) || + (t->second.GetType() == cmTarget::SHARED_LIBRARY) || + (t->second.GetType() == cmTarget::MODULE_LIBRARY) || + (t->second.GetType() == cmTarget::UTILITY)) { // Add a rule to build the target by name. lg->WriteDivider(ruleFileStream); @@ -762,14 +762,10 @@ cmGlobalUnixMakefileGenerator3 lg->WriteMakeRule(ruleFileStream, "fast build rule for target.", localName.c_str(), depends, commands, true); } - } - else - { - if(t->second.GetName() && - strlen(t->second.GetName()) && - emitted.insert(t->second.GetName()).second) + else if(t->second.GetType() == cmTarget::GLOBAL_TARGET) { - // Add a fast rule to build the target + // Provide a fast target for the global targets that just + // forwards to the real target so at least it will work. depends.clear(); commands.clear(); std::string localName = t->second.GetName(); diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index a3bd5c9d8..a3b7b9eb9 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -296,6 +296,23 @@ void cmLocalUnixMakefileGenerator3 this->WriteMakeRule(ruleFileStream, "Convenience name for target.", t->second.GetName(), depends, commands, true); } + + // Add a fast rule to build the target + std::string makefileName = this->GetRelativeTargetDirectory(t->second); + makefileName += "/build.make"; + std::string makeTargetName = this->GetRelativeTargetDirectory(t->second); + makeTargetName += "/build"; + localName = t->second.GetName(); + localName += "/fast"; + depends.clear(); + commands.clear(); + commands.push_back(this->GetRecursiveMakeCall + (makefileName.c_str(), makeTargetName.c_str())); + this->CreateCDCommand(commands, + this->Makefile->GetHomeOutputDirectory(), + this->Makefile->GetStartOutputDirectory()); + this->WriteMakeRule(ruleFileStream, "fast build rule for target.", + localName.c_str(), depends, commands, true); } } } @@ -1481,8 +1498,7 @@ void cmLocalUnixMakefileGenerator3 this->Makefile->GetStartOutputDirectory()); this->WriteMakeRule(ruleFileStream, "Prepare targets for installation.", "preinstall", depends, commands, true); - commands.clear(); - depends.push_back("preinstall"); + depends.clear(); this->WriteMakeRule(ruleFileStream, "Prepare targets for installation.", "preinstall/fast", depends, commands, true);