Proper way to use OpenMP: target_link_libraries() enough?

How do the compiler flags get added

That happens in FindOpenMP module, which is called when you execute find_package(OpenMP).

how could I figure out from the CMake docs that target_link_libraries is sufficient

Well, that’s a fair amount of docs that you would need to read to get to that understanding. In short, I’d say that this part of the documentation wouldn’t be specific to OpenMP, as this topic is rather common and applies to any library/package in general.

The target_link_libraries() is sufficient when the library files are already discovered, so you can provide them to this function as arguments, but obviously you first need to discover those files, and that is what find_package() does (among other things, as you can see in that FindOpenMP module). You can write your own discovery procedure which wouldn’t set -fopenmp flags, if that is what you are after. Alternatively, perhaps you could also overwrite those flags right after find_package(OpenMP) line.