Store direct dependencies in solutions for VS >= 8

Since commit bc43b0f2 (Do not link library dependencies in VS solutions,
2009-10-20) CMake disables for VS >= 8 linking of a target to libraries
that happen to be listed as solution-level dependencies.  Therefore we
can list the direct dependencies of each target in the solution file and
let VS handle transitive dependencies automatically.
This commit is contained in:
Brad King 2010-08-20 14:07:02 -04:00
parent f2b4a46677
commit 1a0c166a26
3 changed files with 18 additions and 3 deletions

View File

@ -699,9 +699,8 @@ bool cmGlobalGenerator::IsDependedOn(const char* project,
l != targets.end(); l++) l != targets.end(); l++)
{ {
cmTarget& target = l->second; cmTarget& target = l->second;
std::set<cmStdString>::const_iterator pos = TargetDependSet const& tgtdeps = this->GetTargetDirectDepends(target);
target.GetUtilities().find(targetIn->GetName()); if(tgtdeps.count(targetIn))
if(pos != target.GetUtilities().end())
{ {
return true; return true;
} }

View File

@ -288,6 +288,20 @@ cmGlobalVisualStudio8Generator
} }
} }
//----------------------------------------------------------------------------
void cmGlobalVisualStudio8Generator::WriteProjectDepends(
std::ostream& fout, const char*, const char*, cmTarget& t)
{
TargetDependSet const& unordered = this->GetTargetDirectDepends(t);
OrderedTargetDependSet depends(unordered);
for(OrderedTargetDependSet::const_iterator i = depends.begin();
i != depends.end(); ++i)
{
std::string guid = this->GetGUID((*i)->GetName());
fout << "\t\t{" << guid << "} = {" << guid << "}\n";
}
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
bool cmGlobalVisualStudio8Generator::NeedLinkLibraryDependencies( bool cmGlobalVisualStudio8Generator::NeedLinkLibraryDependencies(
cmTarget& target) cmTarget& target)

View File

@ -78,6 +78,8 @@ protected:
virtual void WriteProjectConfigurations(std::ostream& fout, virtual void WriteProjectConfigurations(std::ostream& fout,
const char* name, const char* name,
bool partOfDefaultBuild); bool partOfDefaultBuild);
virtual void WriteProjectDepends(std::ostream& fout, const char* name,
const char* path, cmTarget &t);
const char* ArchitectureId; const char* ArchitectureId;
}; };