Multi-OS build with Appveyor and Travis CI
And it also allows C compiling to binary, as long as you can get the right setup.
I use this with Node better-sqlite3, where prebuilt binary for Windows is not working (with Electron), and I am running development on MacOS.
patarapolw/rep2recall - .travis.yml
patarapolw/rep2recall - appveyor.yml
This is also a possibility with Python
py2app, and Golang with cgo.
Not yet sure about packaging Java...