target_include_directories() documentation doesn't explicitly say what relative paths are relative to
target_include_directories()'s documentation says:
Specified include directories may be absolute paths or relative paths.
But it doesn't explicitly say what relative paths are relative to.
Later it says.
Relative paths are allowed within the INSTALL_INTERFACE expression and are interpreted relative to the installation prefix.
Which, when combined, may make you think relative paths are allowed only within the INSTALL_INTERFACE.
FWIW Craig's Professional CMake says
Relative paths will be automatically converted to absolute paths where needed (with one exception discussed below), with paths being treated as relative to the current source directory.
Which is the behaviour I have always seen.