**Short answer:**
I use cmake cache because I need global cmake variable

**Long answer:**
All variables in cmake are alive inside a some scope (with nested scopes).
Here I need a **global** variable, that is accessible from different cmake configuration files with *unpredictable scopes*:
- 3rdparty libs that will be builded and exported (static builds)
- from modules that are added
- from generator that exports build/install configuration info.

Cmake `cache` is used as a workaround for global variables. I know about PARENT_SCOPE, but I prefer to use them to return functions values.

**Similar stories:**
`cmake/OpenCVModule.cmake` lines 47-62

P.S. If it is not a good place to clear variables then I wait for suggestions =)