diff options
author | Brad King <brad.king@kitware.com> | 2019-07-23 14:01:13 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2019-07-23 14:44:19 (GMT) |
commit | 1d3841b6003d4f1a45e79f6b9e6d6357514905f1 (patch) | |
tree | 750424fd2e4726f489c8f5c894300ffc65da3db4 /Source/cmGeneratorTarget.h | |
parent | b5460f99315f8e6a6bdc985ebc0ca18dd8a294a8 (diff) | |
download | CMake-1d3841b6003d4f1a45e79f6b9e6d6357514905f1.zip CMake-1d3841b6003d4f1a45e79f6b9e6d6357514905f1.tar.gz CMake-1d3841b6003d4f1a45e79f6b9e6d6357514905f1.tar.bz2 |
Genex: Memoize usage requirement TARGET_PROPERTY existence
For each usage requirement (such as `INTERFACE_COMPILE_DEFINITIONS` or
`INTERFACE_INCLUDE_DIRECTORIES`), the value of the generator expression
`$<TARGET_PROPERTY:target,prop>` includes the values of the same
property from the transitive closure of link libraries of the target.
In cases that a target's transitive closure of dependencies does not
depend on the target being linked (the "head" target), we can memoize
whether or not a usage requirement property exists at all for that
target. When a usage requirement does not exist for a target, we
can skip evaluating it for every consuming target.
Fixes: #18964, #18965
Diffstat (limited to 'Source/cmGeneratorTarget.h')
-rw-r--r-- | Source/cmGeneratorTarget.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h index b875c40..3874738 100644 --- a/Source/cmGeneratorTarget.h +++ b/Source/cmGeneratorTarget.h @@ -14,6 +14,7 @@ #include <set> #include <stddef.h> #include <string> +#include <unordered_map> #include <utility> #include <vector> @@ -856,6 +857,10 @@ private: mutable std::vector<AllConfigSource> AllConfigSources; void ComputeAllConfigSources() const; + mutable std::unordered_map<std::string, bool> MaybeInterfacePropertyExists; + bool MaybeHaveInterfaceProperty(std::string const& prop, + cmGeneratorExpressionContext* context) const; + std::vector<TargetPropertyEntry*> IncludeDirectoriesEntries; std::vector<TargetPropertyEntry*> CompileOptionsEntries; std::vector<TargetPropertyEntry*> CompileFeaturesEntries; |