I suggest you to use rsync instead of cp, if you can it has the option -m that will exclude empty folders, example:
rsync -am <origin> <destination>
Explanation of the command in explainshell.com
I'm using the -a option because it does a lot of nice default action, but if you want you can also use the -r option, that will set the recursive mode only.
[ADD comment]
I do not know of a way to do this with cp, at least the man page does not show any option that will do that for you. You probably can do a more complex solution by using the command find
to find list of files/directories to copy, and then pass it to cp, but that would be much more complicated than rsync. rsync is even pretty much standard in many linuxes