You can use it on their distro (Ubuntu based with lots of curated apps) or on its own (you can still get access to their curated apps, just not in the store)
EDIT: Sorry, I misunderstood. You want classic Mac. I'd say get Xfce4 and theme it yourself then.
You can build with mingw64 built with msvc and use more or less the same Makefile. As for Xcode... well, there's not really a good reason to support Mac. On principle I wouldn't even try
Life is and will always be better writing your own Makefiles. It's literally so easy. I do not get the distaste. Cmake is arcane magic. Bazel is practically written in runes. Makefile is a just a glorified build script, but where you don't have to use a bunch of if statements to avoid building everything each time.
And yeah I know about NixOS but I like to distro hop and experiment
If you know about NixOS, then you probably know this, but Nix, the package manager/the language behind NixOS, is cross-platform.
I daily drive NixOS, but I also use Nix (and home-manager) on my Fedora music laptop, my Ubuntu home file-server, and my work Windows machine (WSL) to install and configure neovim automatically instead of copying a config, installing all the packages, and running check health over and over again until everything is set up.
I just copy my neovim.nix file over (also other things like zsh.nix) and run home-manager switch
You don't have to use NixOS to take advantage of its benefits.
In case you're interested, the language is a derivative of an esolang I made called NaBD. The idea was a Turing tarpit but for functional languages. What's the minimal I could get by with and still feel like a real language? (And no, not just lambda calculus; needed a real implementation)
I realized this sort of stripped-down functional language would make a great basis for a graphical programming language, something I've wanted to make for a while, so I set out to refine and remake it into just that.
That's why the syntax is a little bizarre, bc it mimics the flow of graphical blocks. It also is very simple. Every function has one input and one output with no first class funcs/currying. It's also statically typed.
Here's a truth-machine (doesn't work yet bc I haven't implemented some of the standard functions; it does parse and type check tho at least):
truth_mach :: Num -> Num =
{ inp -> bool,
1 -> str -> print -> truth_mach,
0 -> str -> print } -> if.
main :: <<Char>> -> Num = read -> parse -> truth_mach.
It will also support the C ABI via extern_c name_of_lib : name_of_function :: Type -> Type. This is not implemented yet either.
Rust and Haskell (I think Haskell counts)