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