cmGeneratorTarget: Cache property evaluation results
This change aims to improve property evaluation performance by avoiding recursive visits into target dependencies as much as possible.
Two caches are added to cmGeneratorTarget
: one stores only local property values (i.e. not including transitive values from dependencies), the other one stores only transitive values.
The cache keys are (property name
, language
) pairs. Only values that are independent from the config and head property are stored in caches.
This may change the order and number of occurrences of values in CMake outputs, but I haven't found cases where the set of outputted values is actually different.
I've measured the performance improvements on a very large CMake project:
Calls to cmGeneratorTarget::EvaluateInterfaceProperty(Recursive)
|
Total Generate time | |
---|---|---|
Without change | 173,184,545 | 358s |
With change | 2,327,437 | 249s |