Removes the need to store to separate SRC and HEADER variables, and then construct the target in most cases.
INTERFACE doesn't define the symbol when compiling the library itself. PUBLIC should be used when the definition is needed both by the library and by the users.