`-` in a recipe tells Make to ignore any errors (see Errors in recipes).
In this specific case, any error reported by `cp` will be ignored (the output will contain any messages, but the build will continue).
This only works if `-` is interpreted by Make, _i.e._ it's the first non-whitespace character in the line (or the characters preceding it are also interpreted by Make). In this case, `$(hide)` needs to be considered: if `hide` is empty or `@`, `-cp` will have the intended effect; but if `hide` is for instance `@>/dev/null` (so the command isn't echoed and its standard output is discarded), `-cp` will be passed as-is to the shell and the command will fail.