cmake: Future-proof --find-package mode.
Create cmGeneratorTargets before generating generate-time information. C++ interfaces for querying build information is increasingly only available at generate time through the cmGeneratorTarget class. Ensure that the required cmGeneratorTarget instances are created. Use the cmGlobalGenerator access API to access the relevant cmGeneratorTarget instead of creating a temporary one on the stack.
This commit is contained in:
parent
cb7af7af44
commit
a7f393dc49
|
@ -1374,36 +1374,38 @@ void cmGlobalGenerator::FinalizeTargetCompileInfo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void cmGlobalGenerator::CreateGeneratorTargets(cmMakefile *mf)
|
||||||
|
{
|
||||||
|
cmGeneratorTargetsType generatorTargets;
|
||||||
|
cmTargets& targets = mf->GetTargets();
|
||||||
|
for(cmTargets::iterator ti = targets.begin();
|
||||||
|
ti != targets.end(); ++ti)
|
||||||
|
{
|
||||||
|
cmTarget* t = &ti->second;
|
||||||
|
cmGeneratorTarget* gt = new cmGeneratorTarget(t);
|
||||||
|
this->GeneratorTargets[t] = gt;
|
||||||
|
generatorTargets[t] = gt;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(std::vector<cmTarget*>::const_iterator
|
||||||
|
j = mf->GetOwnedImportedTargets().begin();
|
||||||
|
j != mf->GetOwnedImportedTargets().end(); ++j)
|
||||||
|
{
|
||||||
|
cmGeneratorTarget* gt = new cmGeneratorTarget(*j);
|
||||||
|
this->GeneratorTargets[*j] = gt;
|
||||||
|
generatorTargets[*j] = gt;
|
||||||
|
}
|
||||||
|
mf->SetGeneratorTargets(generatorTargets);
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmGlobalGenerator::CreateGeneratorTargets()
|
void cmGlobalGenerator::CreateGeneratorTargets()
|
||||||
{
|
{
|
||||||
// Construct per-target generator information.
|
// Construct per-target generator information.
|
||||||
for(unsigned int i=0; i < this->LocalGenerators.size(); ++i)
|
for(unsigned int i=0; i < this->LocalGenerators.size(); ++i)
|
||||||
{
|
{
|
||||||
cmGeneratorTargetsType generatorTargets;
|
this->CreateGeneratorTargets(this->LocalGenerators[i]->GetMakefile());
|
||||||
|
|
||||||
cmMakefile *mf = this->LocalGenerators[i]->GetMakefile();
|
|
||||||
|
|
||||||
cmTargets& targets = mf->GetTargets();
|
|
||||||
for(cmTargets::iterator ti = targets.begin();
|
|
||||||
ti != targets.end(); ++ti)
|
|
||||||
{
|
|
||||||
cmTarget* t = &ti->second;
|
|
||||||
cmGeneratorTarget* gt = new cmGeneratorTarget(t);
|
|
||||||
this->GeneratorTargets[t] = gt;
|
|
||||||
generatorTargets[t] = gt;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(std::vector<cmTarget*>::const_iterator
|
|
||||||
j = mf->GetOwnedImportedTargets().begin();
|
|
||||||
j != mf->GetOwnedImportedTargets().end(); ++j)
|
|
||||||
{
|
|
||||||
cmGeneratorTarget* gt = new cmGeneratorTarget(*j);
|
|
||||||
this->GeneratorTargets[*j] = gt;
|
|
||||||
generatorTargets[*j] = gt;
|
|
||||||
}
|
|
||||||
|
|
||||||
mf->SetGeneratorTargets(generatorTargets);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -432,6 +432,8 @@ private:
|
||||||
|
|
||||||
// Per-target generator information.
|
// Per-target generator information.
|
||||||
cmGeneratorTargetsType GeneratorTargets;
|
cmGeneratorTargetsType GeneratorTargets;
|
||||||
|
friend class cmake;
|
||||||
|
void CreateGeneratorTargets(cmMakefile* mf);
|
||||||
void CreateGeneratorTargets();
|
void CreateGeneratorTargets();
|
||||||
void ComputeGeneratorTargetObjects();
|
void ComputeGeneratorTargetObjects();
|
||||||
virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
|
virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
|
||||||
|
|
|
@ -593,9 +593,10 @@ bool cmake::FindPackage(const std::vector<std::string>& args)
|
||||||
std::string linkPath;
|
std::string linkPath;
|
||||||
std::string flags;
|
std::string flags;
|
||||||
std::string linkFlags;
|
std::string linkFlags;
|
||||||
cmGeneratorTarget gtgt(tgt);
|
gg->CreateGeneratorTargets(mf);
|
||||||
|
cmGeneratorTarget *gtgt = gg->GetGeneratorTarget(tgt);
|
||||||
lg->GetTargetFlags(linkLibs, frameworkPath, linkPath, flags, linkFlags,
|
lg->GetTargetFlags(linkLibs, frameworkPath, linkPath, flags, linkFlags,
|
||||||
>gt);
|
gtgt);
|
||||||
linkLibs = frameworkPath + linkPath + linkLibs;
|
linkLibs = frameworkPath + linkPath + linkLibs;
|
||||||
|
|
||||||
printf("%s\n", linkLibs.c_str() );
|
printf("%s\n", linkLibs.c_str() );
|
||||||
|
|
Loading…
Reference in New Issue