VS: Refactor target ordering logic
Refactor cmGlobalVisualStudioGenerator::TargetCompare to store the name of the target that should come first instead of hard-coding "ALL_BUILD". Update client sites to specify "ALL_BUILD" when ordering for .sln files and an empty string otherwise (in cases when "ALL_BUILD" should not be encountered anyway).
This commit is contained in:
parent
dce7d8befb
commit
03bfe71ae0
|
@ -217,7 +217,7 @@ void cmGlobalVisualStudio6Generator
|
||||||
TargetDependSet projectTargets;
|
TargetDependSet projectTargets;
|
||||||
TargetDependSet originalTargets;
|
TargetDependSet originalTargets;
|
||||||
this->GetTargetSets(projectTargets, originalTargets, root, generators);
|
this->GetTargetSets(projectTargets, originalTargets, root, generators);
|
||||||
OrderedTargetDependSet orderedProjectTargets(projectTargets);
|
OrderedTargetDependSet orderedProjectTargets(projectTargets, "ALL_BUILD");
|
||||||
|
|
||||||
for(OrderedTargetDependSet::const_iterator
|
for(OrderedTargetDependSet::const_iterator
|
||||||
tt = orderedProjectTargets.begin();
|
tt = orderedProjectTargets.begin();
|
||||||
|
|
|
@ -94,7 +94,7 @@ void cmGlobalVisualStudio71Generator
|
||||||
TargetDependSet projectTargets;
|
TargetDependSet projectTargets;
|
||||||
TargetDependSet originalTargets;
|
TargetDependSet originalTargets;
|
||||||
this->GetTargetSets(projectTargets, originalTargets, root, generators);
|
this->GetTargetSets(projectTargets, originalTargets, root, generators);
|
||||||
OrderedTargetDependSet orderedProjectTargets(projectTargets);
|
OrderedTargetDependSet orderedProjectTargets(projectTargets, "ALL_BUILD");
|
||||||
|
|
||||||
this->WriteTargetsToSolution(fout, root, orderedProjectTargets);
|
this->WriteTargetsToSolution(fout, root, orderedProjectTargets);
|
||||||
|
|
||||||
|
|
|
@ -568,7 +568,7 @@ void cmGlobalVisualStudio7Generator
|
||||||
TargetDependSet projectTargets;
|
TargetDependSet projectTargets;
|
||||||
TargetDependSet originalTargets;
|
TargetDependSet originalTargets;
|
||||||
this->GetTargetSets(projectTargets, originalTargets, root, generators);
|
this->GetTargetSets(projectTargets, originalTargets, root, generators);
|
||||||
OrderedTargetDependSet orderedProjectTargets(projectTargets);
|
OrderedTargetDependSet orderedProjectTargets(projectTargets, "ALL_BUILD");
|
||||||
|
|
||||||
this->WriteTargetsToSolution(fout, root, orderedProjectTargets);
|
this->WriteTargetsToSolution(fout, root, orderedProjectTargets);
|
||||||
|
|
||||||
|
|
|
@ -449,7 +449,7 @@ void cmGlobalVisualStudio8Generator::WriteProjectDepends(
|
||||||
{
|
{
|
||||||
cmGeneratorTarget* gt = this->GetGeneratorTarget(&t);
|
cmGeneratorTarget* gt = this->GetGeneratorTarget(&t);
|
||||||
TargetDependSet const& unordered = this->GetTargetDirectDepends(gt);
|
TargetDependSet const& unordered = this->GetTargetDirectDepends(gt);
|
||||||
OrderedTargetDependSet depends(unordered);
|
OrderedTargetDependSet depends(unordered, std::string());
|
||||||
for(OrderedTargetDependSet::const_iterator i = depends.begin();
|
for(OrderedTargetDependSet::const_iterator i = depends.begin();
|
||||||
i != depends.end(); ++i)
|
i != depends.end(); ++i)
|
||||||
{
|
{
|
||||||
|
|
|
@ -864,28 +864,34 @@ bool
|
||||||
cmGlobalVisualStudioGenerator::TargetCompare
|
cmGlobalVisualStudioGenerator::TargetCompare
|
||||||
::operator()(cmGeneratorTarget const* l, cmGeneratorTarget const* r) const
|
::operator()(cmGeneratorTarget const* l, cmGeneratorTarget const* r) const
|
||||||
{
|
{
|
||||||
// Make sure ALL_BUILD is first so it is the default active project.
|
// Make sure a given named target is ordered first,
|
||||||
if(r->GetName() == "ALL_BUILD")
|
// e.g. to set ALL_BUILD as the default active project.
|
||||||
|
// When the empty string is named this is a no-op.
|
||||||
|
if (r->GetName() == this->First)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(l->GetName() == "ALL_BUILD")
|
if (l->GetName() == this->First)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return strcmp(l->GetName().c_str(), r->GetName().c_str()) < 0;
|
return l->GetName() < r->GetName();
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
cmGlobalVisualStudioGenerator::OrderedTargetDependSet
|
cmGlobalVisualStudioGenerator::OrderedTargetDependSet
|
||||||
::OrderedTargetDependSet(TargetDependSet const& targets)
|
::OrderedTargetDependSet(TargetDependSet const& targets,
|
||||||
|
std::string const& first):
|
||||||
|
derived(TargetCompare(first))
|
||||||
{
|
{
|
||||||
this->insert(targets.begin(), targets.end());
|
this->insert(targets.begin(), targets.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
cmGlobalVisualStudioGenerator::OrderedTargetDependSet
|
cmGlobalVisualStudioGenerator::OrderedTargetDependSet
|
||||||
::OrderedTargetDependSet(TargetSet const& targets)
|
::OrderedTargetDependSet(TargetSet const& targets,
|
||||||
|
std::string const& first):
|
||||||
|
derived(TargetCompare(first))
|
||||||
{
|
{
|
||||||
for (TargetSet::const_iterator it = targets.begin();
|
for (TargetSet::const_iterator it = targets.begin();
|
||||||
it != targets.end(); ++it)
|
it != targets.end(); ++it)
|
||||||
|
|
|
@ -89,8 +89,11 @@ public:
|
||||||
virtual bool TargetsWindowsCE() const { return false; }
|
virtual bool TargetsWindowsCE() const { return false; }
|
||||||
|
|
||||||
class TargetSet: public std::set<cmTarget const*> {};
|
class TargetSet: public std::set<cmTarget const*> {};
|
||||||
struct TargetCompare
|
class TargetCompare
|
||||||
{
|
{
|
||||||
|
std::string First;
|
||||||
|
public:
|
||||||
|
TargetCompare(std::string const& first): First(first) {}
|
||||||
bool operator()(cmGeneratorTarget const* l,
|
bool operator()(cmGeneratorTarget const* l,
|
||||||
cmGeneratorTarget const* r) const;
|
cmGeneratorTarget const* r) const;
|
||||||
};
|
};
|
||||||
|
@ -151,11 +154,14 @@ class cmGlobalVisualStudioGenerator::OrderedTargetDependSet:
|
||||||
public std::multiset<cmTargetDepend,
|
public std::multiset<cmTargetDepend,
|
||||||
cmGlobalVisualStudioGenerator::TargetCompare>
|
cmGlobalVisualStudioGenerator::TargetCompare>
|
||||||
{
|
{
|
||||||
|
typedef std::multiset<cmTargetDepend,
|
||||||
|
cmGlobalVisualStudioGenerator::TargetCompare>
|
||||||
|
derived;
|
||||||
public:
|
public:
|
||||||
typedef cmGlobalGenerator::TargetDependSet TargetDependSet;
|
typedef cmGlobalGenerator::TargetDependSet TargetDependSet;
|
||||||
typedef cmGlobalVisualStudioGenerator::TargetSet TargetSet;
|
typedef cmGlobalVisualStudioGenerator::TargetSet TargetSet;
|
||||||
OrderedTargetDependSet(TargetDependSet const&);
|
OrderedTargetDependSet(TargetDependSet const&, std::string const& first);
|
||||||
OrderedTargetDependSet(TargetSet const&);
|
OrderedTargetDependSet(TargetSet const&, std::string const& first);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2849,7 +2849,7 @@ void cmVisualStudio10TargetGenerator::WriteProjectReferences()
|
||||||
= this->GlobalGenerator->GetTargetDirectDepends(this->GeneratorTarget);
|
= this->GlobalGenerator->GetTargetDirectDepends(this->GeneratorTarget);
|
||||||
typedef cmGlobalVisualStudioGenerator::OrderedTargetDependSet
|
typedef cmGlobalVisualStudioGenerator::OrderedTargetDependSet
|
||||||
OrderedTargetDependSet;
|
OrderedTargetDependSet;
|
||||||
OrderedTargetDependSet depends(unordered);
|
OrderedTargetDependSet depends(unordered, std::string());
|
||||||
this->WriteString("<ItemGroup>\n", 1);
|
this->WriteString("<ItemGroup>\n", 1);
|
||||||
for( OrderedTargetDependSet::const_iterator i = depends.begin();
|
for( OrderedTargetDependSet::const_iterator i = depends.begin();
|
||||||
i != depends.end(); ++i)
|
i != depends.end(); ++i)
|
||||||
|
|
Loading…
Reference in New Issue