Semantic Versioning is about the API. Assuming it's a single build with different compilers, compiler settings, or build-time configurations, all builds would share the same Semantic Version. If the input to the build process is the same set of code and configuration, the output should also have the same identification.
In this case, item 10 from the Semantic Versioning spec applies:
Build metadata MAY be denoted by appending a plus sign and a series of dot separated identifiers immediately following the patch or pre-release version. Identifiers MUST comprise only ASCII alphanumerics and hyphens [0-9A-Za-z-]. Identifiers MUST NOT be empty. Build metadata MUST be ignored when determining version precedence. Thus two versions that differ only in the build metadata, have the same precedence. Examples: 1.0.0-alpha+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f85, 1.0.0+21AF26D3----117B344092BD.
Since you are running different build configurations to target different operating systems, you can include this as build metadata. The general structure M.m.p+OS would be appropriate. If you wanted to include additional build metadata, such as timestamps or commit hashes, you could also append those as part of the build metadata.
SomeSoftwareSetup_Win64.exe