mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-10-06 04:03:27 +03:00
Autogen: Clear sources meta data cache
Adds cmGeneratorTarget::clearSourcesCache() which clears the cache of precomputed sources lists and object names. The cache gets recomputed on demand. Clearing the cache is necessary in case an OBJECT library gets a source added after a target (ORIGIN) that includes it computed it's external sources cache. This may happen in AUTOMOC when ORIGIN is processed before the OBJECT library which gets a mocs_compilation.cpp file added. Closes #17152 Closes #17139 Closes #17085 Closes #15967
This commit is contained in:
1 parent
14b2f85cd4
commit
952fc65d14
3 files changed
+19
-2
No files matched your search
@@ -326,6 +326,13 @@ std::string cmGeneratorTarget::GetOutputName(
|
||||
return i->second;
|
||||
}
|
||||
|
||||
void cmGeneratorTarget::ClearSourcesCache()
|
||||
{
|
||||
this->KindedSourcesMap.clear();
|
||||
this->LinkImplementationLanguageIsContextDependent = true;
|
||||
this->Objects.clear();
|
||||
}
|
||||
|
||||
void cmGeneratorTarget::AddSourceCommon(const std::string& src)
|
||||
{
|
||||
cmListFileBacktrace lfbt = this->Makefile->GetBacktrace();
|
||||
@@ -333,8 +340,7 @@ void cmGeneratorTarget::AddSourceCommon(const std::string& src)
|
||||
CM_AUTO_PTR<cmCompiledGeneratorExpression> cge = ge.Parse(src);
|
||||
cge->SetEvaluateForBuildsystem(true);
|
||||
this->SourceEntries.push_back(new TargetPropertyEntry(cge));
|
||||
this->KindedSourcesMap.clear();
|
||||
this->LinkImplementationLanguageIsContextDependent = true;
|
||||
this->ClearSourcesCache();
|
||||
}
|
||||
|
||||
void cmGeneratorTarget::AddSource(const std::string& src)
|
||||
|
||||
@@ -491,6 +491,11 @@ public:
|
||||
std::string GetOutputName(const std::string& config,
|
||||
cmStateEnums::ArtifactType artifact) const;
|
||||
|
||||
/** Clears cached meta data for local and external source files.
|
||||
* The meta data will be recomputed on demand.
|
||||
*/
|
||||
void ClearSourcesCache();
|
||||
|
||||
void AddSource(const std::string& src);
|
||||
void AddTracedSources(std::vector<std::string> const& srcs);
|
||||
|
||||
|
||||
@@ -919,6 +919,12 @@ void cmQtAutoGeneratorInitializer::InitializeAutogenTarget(
|
||||
}
|
||||
}
|
||||
|
||||
// cmGeneratorTarget::GetConfigCommonSourceFiles computes the target's
|
||||
// sources meta data cache. Clear it so that OBJECT library targets that
|
||||
// are AUTOGEN initialized after this target get their added
|
||||
// mocs_compilation.cpp source acknowledged by this target.
|
||||
target->ClearSourcesCache();
|
||||
|
||||
// Convert std::set to std::vector
|
||||
const std::vector<std::string> autogenDepends(autogenDependsSet.begin(),
|
||||
autogenDependsSet.end());
|
||||
|
||||
Reference in new issue
Block a user