cmCommonTargetGenerator: Adopt linked target directory computation
Factor a GetLinkedTargetDirectories method out of cmMakefileTargetGenerator::WriteTargetDependRules to compute the list of directories associated with targets to which the current target links.
This commit is contained in:
parent
98d6e9ec2d
commit
6d79eda769
|
@ -368,3 +368,37 @@ std::string cmCommonTargetGenerator::GetIncludes(std::string const& l)
|
|||
}
|
||||
return i->second;
|
||||
}
|
||||
|
||||
std::vector<std::string>
|
||||
cmCommonTargetGenerator::GetLinkedTargetDirectories() const
|
||||
{
|
||||
std::vector<std::string> dirs;
|
||||
std::set<cmTarget const*> emitted;
|
||||
if (cmComputeLinkInformation* cli =
|
||||
this->Target->GetLinkInformation(this->ConfigName))
|
||||
{
|
||||
cmComputeLinkInformation::ItemVector const& items = cli->GetItems();
|
||||
for(cmComputeLinkInformation::ItemVector::const_iterator
|
||||
i = items.begin(); i != items.end(); ++i)
|
||||
{
|
||||
cmTarget const* linkee = i->Target;
|
||||
if(linkee && !linkee->IsImported()
|
||||
// We can ignore the INTERFACE_LIBRARY items because
|
||||
// Target->GetLinkInformation already processed their
|
||||
// link interface and they don't have any output themselves.
|
||||
&& linkee->GetType() != cmTarget::INTERFACE_LIBRARY
|
||||
&& emitted.insert(linkee).second)
|
||||
{
|
||||
cmGeneratorTarget* gt =
|
||||
this->GlobalGenerator->GetGeneratorTarget(linkee);
|
||||
cmLocalGenerator* lg = gt->GetLocalGenerator();
|
||||
cmMakefile* mf = linkee->GetMakefile();
|
||||
std::string di = mf->GetCurrentBinaryDirectory();
|
||||
di += "/";
|
||||
di += lg->GetTargetDirectory(*linkee);
|
||||
dirs.push_back(di);
|
||||
}
|
||||
}
|
||||
}
|
||||
return dirs;
|
||||
}
|
||||
|
|
|
@ -85,6 +85,8 @@ protected:
|
|||
ByLanguageMap DefinesByLanguage;
|
||||
std::string GetIncludes(std::string const& l);
|
||||
ByLanguageMap IncludesByLanguage;
|
||||
|
||||
std::vector<std::string> GetLinkedTargetDirectories() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1059,33 +1059,11 @@ void cmMakefileTargetGenerator::WriteTargetDependRules()
|
|||
<< "\n"
|
||||
<< "# Targets to which this target links.\n"
|
||||
<< "set(CMAKE_TARGET_LINKED_INFO_FILES\n";
|
||||
std::set<cmTarget const*> emitted;
|
||||
const char* cfg = this->LocalGenerator->GetConfigName().c_str();
|
||||
if(cmComputeLinkInformation* cli = this->Target->GetLinkInformation(cfg))
|
||||
std::vector<std::string> dirs = this->GetLinkedTargetDirectories();
|
||||
for (std::vector<std::string>::iterator i = dirs.begin();
|
||||
i != dirs.end(); ++i)
|
||||
{
|
||||
cmComputeLinkInformation::ItemVector const& items = cli->GetItems();
|
||||
for(cmComputeLinkInformation::ItemVector::const_iterator
|
||||
i = items.begin(); i != items.end(); ++i)
|
||||
{
|
||||
cmTarget const* linkee = i->Target;
|
||||
if(linkee && !linkee->IsImported()
|
||||
// We can ignore the INTERFACE_LIBRARY items because
|
||||
// Target->GetLinkInformation already processed their
|
||||
// link interface and they don't have any output themselves.
|
||||
&& linkee->GetType() != cmTarget::INTERFACE_LIBRARY
|
||||
&& emitted.insert(linkee).second)
|
||||
{
|
||||
cmGeneratorTarget* gt =
|
||||
this->GlobalGenerator->GetGeneratorTarget(linkee);
|
||||
cmLocalGenerator* lg = gt->GetLocalGenerator();
|
||||
cmMakefile* mf = linkee->GetMakefile();
|
||||
std::string di = mf->GetCurrentBinaryDirectory();
|
||||
di += "/";
|
||||
di += lg->GetTargetDirectory(*linkee);
|
||||
di += "/DependInfo.cmake";
|
||||
*this->InfoFileStream << " \"" << di << "\"\n";
|
||||
}
|
||||
}
|
||||
*this->InfoFileStream << " \"" << *i << "/DependInfo.cmake\"\n";
|
||||
}
|
||||
*this->InfoFileStream
|
||||
<< " )\n";
|
||||
|
|
Loading…
Reference in New Issue