Looks like the CMake build enables LTO, the Projucer build doesn’t. The Projucer build enables dead code stripping, the CMake build doesn’t. If I avoid linking the lto_flags target, and set the XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING YES property on the Projucer target, the size of the CMake build drops considerably.
I haven’t tested in MSVC, but I see that OptimizeReferences is set in the link settings in the vcxproj, which I think functions similarly to dead_strip on macOS. I’m not sure if there’s a nice pure-cmake way of setting that option, but you could try adding /OPT:REF to target_link_options and see whether that helps.
If you’re seeing differences in builds, a good place to start is to run both builds in verbose mode and to check for differences in the compiler flags.
