If Cargo existed, people would not have developed interesting build systems like Meson and Ninja- and especially not Bazel which really leans in to fixing C++'s build issues.
In some cases, worse is better.
Like build a sub-target using say wasm-pack to then embed the output into a binary. IIRC it gets upset because the cargo lock is already acquired or something.
Using just[0] as a task runner has solved a lot of per-project-scripts problems for me but it still cannot do DAG analysis + parallel task running of tasks not blocked on each other (or allow you to opt into serial or parallel task running). So it remains firmly in just the "task runner" territory.
I know many people would jump at the opportunity to say "just learn `make`!" but no thanks, I value my sanity. `make` is also inheriting a lot of bash-ism weirdness which makes it even worse.
The mage[1] tool that uses `Magefile`-s might be it but it's a bit more verbose (as it's Golang) and I am not sure how well does it integrate with the shell. Maybe script[2] can be used to complement it.
Sadly I don't have the time (and lately the inclination) to experiment but there are tools out there and I wish we finally started unifying things.
[0] https://github.com/casey/just
This means that for the majority of folks and projects, it ends up being a very smooth experience.
That does not mean that Cargo is perfect, and there’s a lot of stuff it doesn’t do well.
I am hoping that buck2 can get easier to use "in the small" and then just switch to it for all things, but it's too immature outside of Meta just yet.