the usage of target_include_directories vs target_link_libraries

As for target_include_directories, it depends on the target nature.
for headers only libraries, I would use INTERFACE for the INSTALL_INTERFACE
For other libraries, I would put headers that may be include by third-party target in a different directory than the one used only by the target.
The first one will be declared PUBLIC for the BUILD_INTERFACE and INSTALL_INTERFACE.
For applications, I would declare only PRIVATE for the BUILD_INTERFACE and INSTALL_INTERFACE.

A.