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;
|
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;
|
ByLanguageMap DefinesByLanguage;
|
||||||
std::string GetIncludes(std::string const& l);
|
std::string GetIncludes(std::string const& l);
|
||||||
ByLanguageMap IncludesByLanguage;
|
ByLanguageMap IncludesByLanguage;
|
||||||
|
|
||||||
|
std::vector<std::string> GetLinkedTargetDirectories() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1059,33 +1059,11 @@ void cmMakefileTargetGenerator::WriteTargetDependRules()
|
||||||
<< "\n"
|
<< "\n"
|
||||||
<< "# Targets to which this target links.\n"
|
<< "# Targets to which this target links.\n"
|
||||||
<< "set(CMAKE_TARGET_LINKED_INFO_FILES\n";
|
<< "set(CMAKE_TARGET_LINKED_INFO_FILES\n";
|
||||||
std::set<cmTarget const*> emitted;
|
std::vector<std::string> dirs = this->GetLinkedTargetDirectories();
|
||||||
const char* cfg = this->LocalGenerator->GetConfigName().c_str();
|
for (std::vector<std::string>::iterator i = dirs.begin();
|
||||||
if(cmComputeLinkInformation* cli = this->Target->GetLinkInformation(cfg))
|
i != dirs.end(); ++i)
|
||||||
{
|
{
|
||||||
cmComputeLinkInformation::ItemVector const& items = cli->GetItems();
|
*this->InfoFileStream << " \"" << *i << "/DependInfo.cmake\"\n";
|
||||||
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
|
*this->InfoFileStream
|
||||||
<< " )\n";
|
<< " )\n";
|
||||||
|
|
Loading…
Reference in New Issue