ENH: Store in DependInfo.cmake files a list of the corresponding files for the targets to which a target links. This is useful for locating Fortran modules provided by linked targets. See issue #5809.
This commit is contained in:
parent
9528b38fba
commit
42f3f3c342
|
@ -792,6 +792,37 @@ void cmMakefileTargetGenerator::WriteTargetDependRules()
|
||||||
*this->InfoFileStream << " )\n\n";
|
*this->InfoFileStream << " )\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Store list of targets linked directly or transitively.
|
||||||
|
{
|
||||||
|
*this->InfoFileStream
|
||||||
|
<< "\n"
|
||||||
|
<< "# Targets to which this target links.\n"
|
||||||
|
<< "SET(CMAKE_TARGET_LINKED_INFO_FILES\n";
|
||||||
|
cmGlobalGenerator* gg = this->GlobalGenerator;
|
||||||
|
std::set<cmTarget const*> emitted;
|
||||||
|
cmTarget::LinkLibraryVectorType const& libs =
|
||||||
|
this->Target->GetLinkLibraries();
|
||||||
|
for(cmTarget::LinkLibraryVectorType::const_iterator j = libs.begin();
|
||||||
|
j != libs.end(); ++j)
|
||||||
|
{
|
||||||
|
if(cmTarget const* linkee = gg->FindTarget(0, j->first.c_str(), false))
|
||||||
|
{
|
||||||
|
if(emitted.insert(linkee).second)
|
||||||
|
{
|
||||||
|
cmMakefile* mf = linkee->GetMakefile();
|
||||||
|
cmLocalGenerator* lg = mf->GetLocalGenerator();
|
||||||
|
std::string di = mf->GetStartOutputDirectory();
|
||||||
|
di += "/";
|
||||||
|
di += lg->GetTargetDirectory(*linkee);
|
||||||
|
di += "/DependInfo.cmake";
|
||||||
|
*this->InfoFileStream << " \"" << di << "\"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*this->InfoFileStream
|
||||||
|
<< " )\n";
|
||||||
|
}
|
||||||
|
|
||||||
// and now write the rule to use it
|
// and now write the rule to use it
|
||||||
std::vector<std::string> depends;
|
std::vector<std::string> depends;
|
||||||
std::vector<std::string> commands;
|
std::vector<std::string> commands;
|
||||||
|
|
Loading…
Reference in New Issue