ENH: Avoid computing link information for static library targets. They do not link.

This commit is contained in:
Brad King 2008-02-07 16:49:11 -05:00
parent 732784c0bc
commit 410d7b0f36
3 changed files with 32 additions and 20 deletions

View File

@ -2092,6 +2092,12 @@ void cmGlobalXCodeGenerator
} }
} }
// Skip link information for static libraries.
if(cmtarget->GetType() == cmTarget::STATIC_LIBRARY)
{
return;
}
// Loop over configuration types and set per-configuration info. // Loop over configuration types and set per-configuration info.
for(std::vector<std::string>::iterator i = for(std::vector<std::string>::iterator i =
this->CurrentConfigurationTypes.begin(); this->CurrentConfigurationTypes.begin();
@ -2166,29 +2172,28 @@ void cmGlobalXCodeGenerator
} }
// now add the link libraries // now add the link libraries
if(cmtarget->GetType() != cmTarget::STATIC_LIBRARY) {
std::string linkLibs;
const char* sep = "";
typedef cmComputeLinkInformation::ItemVector ItemVector;
ItemVector const& libNames = cli.GetItems();
for(ItemVector::const_iterator li = libNames.begin();
li != libNames.end(); ++li)
{ {
std::string linkLibs; linkLibs += sep;
const char* sep = ""; sep = " ";
typedef cmComputeLinkInformation::ItemVector ItemVector; if(li->IsPath)
ItemVector const& libNames = cli.GetItems();
for(ItemVector::const_iterator li = libNames.begin();
li != libNames.end(); ++li)
{ {
linkLibs += sep; linkLibs += this->XCodeEscapePath(li->Value.c_str());
sep = " "; }
if(li->IsPath) else
{ {
linkLibs += this->XCodeEscapePath(li->Value.c_str()); linkLibs += li->Value;
}
else
{
linkLibs += li->Value;
}
} }
this->AppendBuildSettingAttribute(target, "OTHER_LDFLAGS",
linkLibs.c_str(), configName);
} }
this->AppendBuildSettingAttribute(target, "OTHER_LDFLAGS",
linkLibs.c_str(), configName);
}
} }
} }

View File

@ -720,7 +720,11 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
// Collect up flags to link in needed libraries. // Collect up flags to link in needed libraries.
cmOStringStream linklibs; cmOStringStream linklibs;
this->LocalGenerator->OutputLinkLibraries(linklibs, *this->Target, relink); if(this->Target->GetType() != cmTarget::STATIC_LIBRARY)
{
this->LocalGenerator
->OutputLinkLibraries(linklibs, *this->Target, relink);
}
// Construct object file lists that may be needed to expand the // Construct object file lists that may be needed to expand the
// rule. // rule.

View File

@ -3299,6 +3299,9 @@ cmTargetLinkInterface* cmTarget::ComputeLinkInterface(const char* config)
cmComputeLinkInformation* cmComputeLinkInformation*
cmTarget::GetLinkInformation(const char* config) cmTarget::GetLinkInformation(const char* config)
{ {
// Link information does not make sense for static libraries.
assert(this->GetType() != cmTarget::STATIC_LIBRARY);
// Lookup any existing information for this configuration. // Lookup any existing information for this configuration.
std::map<cmStdString, cmComputeLinkInformation*>::iterator std::map<cmStdString, cmComputeLinkInformation*>::iterator
i = this->LinkInformation.find(config?config:""); i = this->LinkInformation.find(config?config:"");