Use CMake 'usage requirements' to propagate requirements between targets.

Limits their scope which helps prevent requirements pollution.