cmGeneratorTarget: Factor target name resolution out of link item resolution

This commit is contained in:
Brad King 2018-09-10 10:11:57 -04:00
parent 2f708f5d65
commit 18441a6269
2 changed files with 31 additions and 10 deletions

View File

@ -5645,24 +5645,38 @@ void cmGeneratorTarget::ComputeLinkImplementationLibraries(
}
}
cmGeneratorTarget::TargetOrString cmGeneratorTarget::ResolveTargetReference(
std::string const& name) const
{
TargetOrString resolved;
if (cmGeneratorTarget* tgt =
this->LocalGenerator->FindGeneratorTargetToUse(name)) {
resolved.Target = tgt;
} else {
resolved.String = name;
}
return resolved;
}
cmLinkItem cmGeneratorTarget::ResolveLinkItem(std::string const& name) const
{
cmGeneratorTarget* tgt =
this->LocalGenerator->FindGeneratorTargetToUse(name);
TargetOrString resolved = this->ResolveTargetReference(name);
if (!resolved.Target) {
return cmLinkItem(resolved.String);
}
// Skip targets that will not really be linked. This is probably a
// name conflict between an external library and an executable
// within the project.
if (tgt && tgt->GetType() == cmStateEnums::EXECUTABLE &&
!tgt->IsExecutableWithExports()) {
tgt = nullptr;
if (resolved.Target->GetType() == cmStateEnums::EXECUTABLE &&
!resolved.Target->IsExecutableWithExports()) {
return cmLinkItem(resolved.Target->GetName());
}
if (tgt) {
return cmLinkItem(tgt);
}
return cmLinkItem(name);
return cmLinkItem(resolved.Target);
}
std::string cmGeneratorTarget::GetPDBDirectory(const std::string& config) const

View File

@ -357,6 +357,13 @@ public:
cmOptionalLinkImplementation& impl,
const cmGeneratorTarget* head) const;
struct TargetOrString
{
std::string String;
cmGeneratorTarget* Target = nullptr;
};
TargetOrString ResolveTargetReference(std::string const& name) const;
cmLinkItem ResolveLinkItem(std::string const& name) const;
// Compute the set of languages compiled by the target. This is