target_include_directories
is relevant to the preprocessor (which is usually part of the compiler), since it allows to resolve #include
preprocessor directives.
Adding headers with target_sources
is relevant to IDEs (Visual Studio, Xcode, etc.) so they can display these header files, even if they are not directly compiled.
So these 2 functions are doing quite different things, and I can’t think of any situation where you would have to choose between them.
I hope this helps.