Make INTERFACE libraries first-class buildsystem targets
When first introduced, INTERFACE libraries were meant only for collections of usage requirements. Since then several more use cases have come up, such as header-only libraries. We should make INTERFACE libraries first-class buildsystem targets that can be built and installed, e.g. with custom commands and PUBLIC_HEADER files. The remaining distinction from other library types is that they have no compiled/linked artifacts.
Tasks include:
- [X] Teach generators to produce buildsystem targets for INTERFACE libraries (e.g. `make my_iface`) (!5078)
- [X] Remove whitelist restriction on setting properties (!5078)
- [x] ~~Enable headers installation~~ (Done in #15234)
- [X] Allow sources to be added (!5078)
- [X] Allow custom commands (!5078)
- [X] Implement #18608 (!5078)
issue