Speed up graph traversal for project->targets map
The cmGlobalGenerator::AddTargetDepends method traces the dependencies of targets recursively to collect the complete set of targets needed for a given project (for VS .sln files). This commit teaches the method to avoid tracing its dependencies more than once. Otherwise the code does an all-paths walk needlessly.
This commit is contained in:
parent
7e20db0224
commit
0af3b3b802
|
@ -1971,14 +1971,12 @@ cmGlobalGenerator::AddTargetDepends(cmTarget* target,
|
|||
projectTargets)
|
||||
{
|
||||
// add the target itself
|
||||
projectTargets.insert(target);
|
||||
// get the direct depends of target
|
||||
cmGlobalGenerator::TargetDependSet const& tset
|
||||
= this->GetTargetDirectDepends(*target);
|
||||
if(tset.size())
|
||||
if(projectTargets.insert(target).second)
|
||||
{
|
||||
// if there are targets that depend on target
|
||||
// add them and their depends as well
|
||||
// This is the first time we have encountered the target.
|
||||
// Recursively follow its dependencies.
|
||||
cmGlobalGenerator::TargetDependSet const& tset
|
||||
= this->GetTargetDirectDepends(*target);
|
||||
for(cmGlobalGenerator::TargetDependSet::const_iterator i =
|
||||
tset.begin(); i != tset.end(); ++i)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue