Consecutive target_link_libraries with and without PUBLIC

Yes, it has such a default, for when PUBLIC/PRIVATE is omitted always. However, once you use such a keyword in one invocation, you have to use it in all of them.

The way to think about it is to consider target_link_libraries() to have two distinct modes of operation: plain one, and keyword-based one. You can use it just fine in either mode, but you cannot mix modes for the same consuming target.