Now you can use Conan + CMake to build a project with OpenSSL and Boost deps on Mac, Win, Linux. And it seems that Nix is very far from doing this.
EDIT: I remember being amazed when Go came out circa 2011 that I could just "go build" a project and it just worked. One had to understand "GOPATH" which was slightly counterintuitive but not too bad, and of course it wasn't reproducible (both of those problems are pretty much addressed nowadays via modules), but I was blown away that I could actually just "go build" or "go test" and focus on my application code instead of my project tooling.
For example, Go's build system for C (cgo) is configured by stitching together environment variables and magical comments:
// #cgo CFLAGS: -DPNG_DEBUG=1
// #cgo amd64 386 CFLAGS: -DX86=1
// #cgo LDFLAGS: -lpng
// #include <png.h>
import "C"
As bad as CMake is, that is even worse. Imagine making that stuff portable!CMake has major problems (package management and language, as you say) but I don't know of any other tool that solves the problem that CMake solves.
If you have a project where you need to do a thing, you can instead make a Makefile to do the thing:
thing:
some shell command
that's it, now you get to type `make thing`.The power is the generality: it can wrap any command, from jq to curl to whatever. It's perfect for small, weird workflows which don't naturally fit into other build systems.
But don't use it for C++!
It's really easy to specify things incorrectly in a Makefile and not notice for a very long time.
Everyone that equates UNIX with Linux, apparently misses out how much fun (it was not) was writing portable makefiles across all major UNIXes and other non-UNIX platforms during the 90's up to the .COM first wave.