diff options
author | Brad King <brad.king@kitware.com> | 2020-09-09 15:25:21 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2020-09-09 15:28:20 (GMT) |
commit | 51fc3ac972589e76b412f8a6c885af65ab857567 (patch) | |
tree | 6b4be790ef4e30817bf2a6bdfcf71daee675548c | |
parent | 7a73164b4a42b91424efa1343428dd8857e57f71 (diff) | |
parent | 066f4d0f0a324f0db810cde38904996bb16592cb (diff) | |
download | CMake-51fc3ac972589e76b412f8a6c885af65ab857567.zip CMake-51fc3ac972589e76b412f8a6c885af65ab857567.tar.gz CMake-51fc3ac972589e76b412f8a6c885af65ab857567.tar.bz2 |
Merge topic 'vs9-custom-command-dedup'
066f4d0f0a VS: Avoid unnecessary duplication of custom commands across targets in VS 9
8bb5c96bf8 cmLocalVisualStudio7Generator: Adopt SourcesVisited lookup table
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5206
-rw-r--r-- | Source/cmLocalVisualStudio10Generator.cxx | 7 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio10Generator.h | 9 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio7Generator.cxx | 16 | ||||
-rw-r--r-- | Source/cmLocalVisualStudio7Generator.h | 9 |
4 files changed, 24 insertions, 17 deletions
diff --git a/Source/cmLocalVisualStudio10Generator.cxx b/Source/cmLocalVisualStudio10Generator.cxx index 98e9db9..3ed49a0 100644 --- a/Source/cmLocalVisualStudio10Generator.cxx +++ b/Source/cmLocalVisualStudio10Generator.cxx @@ -68,13 +68,6 @@ cmLocalVisualStudio10Generator::~cmLocalVisualStudio10Generator() void cmLocalVisualStudio10Generator::GenerateTarget(cmGeneratorTarget* target) { - auto& targetVisited = this->GetSourcesVisited(target); - auto& deps = this->GlobalGenerator->GetTargetDirectDepends(target); - for (auto& d : deps) { - // Take the union of visited source files of custom commands - auto depVisited = this->GetSourcesVisited(d); - targetVisited.insert(depVisited.begin(), depVisited.end()); - } if (static_cast<cmGlobalVisualStudioGenerator*>(this->GlobalGenerator) ->TargetIsFortranOnly(target)) { this->cmLocalVisualStudio7Generator::GenerateTarget(target); diff --git a/Source/cmLocalVisualStudio10Generator.h b/Source/cmLocalVisualStudio10Generator.h index 631132e..45ee082 100644 --- a/Source/cmLocalVisualStudio10Generator.h +++ b/Source/cmLocalVisualStudio10Generator.h @@ -28,19 +28,10 @@ public: void ReadAndStoreExternalGUID(const std::string& name, const char* path) override; - std::set<cmSourceFile const*>& GetSourcesVisited( - cmGeneratorTarget const* target) - { - return SourcesVisited[target]; - }; - protected: const char* ReportErrorLabel() const override; bool CustomCommandUseLocal() const override { return true; } private: void GenerateTarget(cmGeneratorTarget* target) override; - - std::map<cmGeneratorTarget const*, std::set<cmSourceFile const*>> - SourcesVisited; }; diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 1ebd5da..7795654 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -86,6 +86,15 @@ void cmLocalVisualStudio7Generator::Generate() if (!gt->IsInBuildSystem() || gt->GetProperty("EXTERNAL_MSPROJECT")) { continue; } + + auto& gtVisited = this->GetSourcesVisited(gt); + auto& deps = this->GlobalGenerator->GetTargetDirectDepends(gt); + for (auto& d : deps) { + // Take the union of visited source files of custom commands + auto depVisited = this->GetSourcesVisited(d); + gtVisited.insert(depVisited.begin(), depVisited.end()); + } + this->GenerateTarget(gt); } @@ -1615,6 +1624,8 @@ bool cmLocalVisualStudio7Generator::WriteGroup( this->WriteVCProjBeginGroup(fout, name.c_str(), ""); } + auto& sourcesVisited = this->GetSourcesVisited(target); + // Loop through each source in the source group. for (const cmSourceFile* sf : sourceFiles) { std::string source = sf->GetFullPath(); @@ -1638,7 +1649,10 @@ bool cmLocalVisualStudio7Generator::WriteGroup( // build it, then it will. fout << "\t\t\t\tRelativePath=\"" << d << "\">\n"; if (cmCustomCommand const* command = sf->GetCustomCommand()) { - this->WriteCustomRule(fout, configs, source.c_str(), *command, fcinfo); + if (sourcesVisited.insert(sf).second) { + this->WriteCustomRule(fout, configs, source.c_str(), *command, + fcinfo); + } } else if (!fcinfo.FileConfigMap.empty()) { const char* aCompilerTool = "VCCLCompilerTool"; std::string ppLang = "CXX"; diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h index 9ccd1a1..6e06c09 100644 --- a/Source/cmLocalVisualStudio7Generator.h +++ b/Source/cmLocalVisualStudio7Generator.h @@ -83,6 +83,12 @@ public: virtual void ReadAndStoreExternalGUID(const std::string& name, const char* path); + std::set<cmSourceFile const*>& GetSourcesVisited( + cmGeneratorTarget const* target) + { + return this->SourcesVisited[target]; + }; + protected: virtual void GenerateTarget(cmGeneratorTarget* target); @@ -148,4 +154,7 @@ private: bool FortranProject; bool WindowsCEProject; std::unique_ptr<cmLocalVisualStudio7GeneratorInternals> Internal; + + std::map<cmGeneratorTarget const*, std::set<cmSourceFile const*>> + SourcesVisited; }; |