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:
Brad King 2007-12-28 11:49:46 -05:00
parent 9528b38fba
commit 42f3f3c342
1 changed files with 31 additions and 0 deletions

View File

@ -792,6 +792,37 @@ void cmMakefileTargetGenerator::WriteTargetDependRules()
*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
std::vector<std::string> depends;
std::vector<std::string> commands;