Stop Leaking Includes: Use PUBLIC PRIVATE INTERFACE in Modern CMake
Use target_include_directories and target_link_libraries with PUBLIC, PRIVATE and INTERFACE to encapsulate what a CMake target needs to build and what its consumers need to use it, preventing leaking includes and hidden coupling.