diff options
author | Fujii Hironori <fujii.hironori@gmail.com> | 2018-03-23 06:44:42 (GMT) |
---|---|---|
committer | Fujii Hironori <fujii.hironori@gmail.com> | 2018-04-23 04:31:28 (GMT) |
commit | f59c33a763ba1483129f0e721bc2394bb7442876 (patch) | |
tree | 3ff8c37758ffbe7faebe1e77ec9608e4d619775b /Source/cmLocalVisualStudio10Generator.h | |
parent | d58d4daa6b2e36c6e2318e4d67271542dca79ee6 (diff) | |
download | CMake-f59c33a763ba1483129f0e721bc2394bb7442876.zip CMake-f59c33a763ba1483129f0e721bc2394bb7442876.tar.gz CMake-f59c33a763ba1483129f0e721bc2394bb7442876.tar.bz2 |
VS: Generate a custom command only in the least dependent target
If a custom command is assigned to multiple targets, generate the build
rule only in the least-dependent `.vcxproj` file. Otherwise MSBuild
will run the command on the first build of a dependent target even if
its dependencies already brought the command up to date (in order to
populates its build log).
Generate targets in least-to-most-dependent order, and assign a custom
command to the least dependent target.
Added cmLocalVisualStudio10Generator::GenerateTargetsDepthFirst to call
cmVisualStudio10TargetGenerator::Generate in least-dependent order.
Moved SourcesVisited from cmVisualStudio10TargetGenerator to
cmLocalVisualStudio10Generator to avoid attaching a custom command to
multiple targets among the local generator.
Fixes: #16767
Diffstat (limited to 'Source/cmLocalVisualStudio10Generator.h')
-rw-r--r-- | Source/cmLocalVisualStudio10Generator.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Source/cmLocalVisualStudio10Generator.h b/Source/cmLocalVisualStudio10Generator.h index bcdc307..a4150b9 100644 --- a/Source/cmLocalVisualStudio10Generator.h +++ b/Source/cmLocalVisualStudio10Generator.h @@ -33,10 +33,19 @@ public: void ReadAndStoreExternalGUID(const std::string& name, const char* path) override; + std::set<cmSourceFile const*>& GetSourcesVisited(cmGeneratorTarget* target) + { + return SourcesVisited[target]; + }; + protected: const char* ReportErrorLabel() const override; bool CustomCommandUseLocal() const override { return true; } private: + void GenerateTargetsDepthFirst(cmGeneratorTarget* target, + std::vector<cmGeneratorTarget*>& remaining); + + std::map<cmGeneratorTarget*, std::set<cmSourceFile const*>> SourcesVisited; }; #endif |