If you want a really advanced build system there’s shake, which can deal with things like building things that generates dependency information for things that build things. In a nutshell: It’s strictly more powerful than make because (a single invocation of) make operates on a fixed dependency graph while shake can discover dependencies as it goes.
Mostly though you should use whatever comes with the language you’re using, and if you’re doing something simple use make. That includes “link a multi-language project where the components are generated by language-specific systems”. It notably doesn’t include multi-stage compiler builds. GHC switched from recursive make, which is a bad idea, to non-recursive make, which was… arcane, but at least you didn’t have to make clean to get a correct build, to shake. Here’s the build system it’s a whole project to itself.
Everything has it’s uses. make is maybe good at incremental builds but is (an)used as a task runner which requires the use of “PHONY” in many places, it has about 6 different ways to declare and use variables all with different gotchas, generally has a convoluted syntax, it doesn’t support different interpreters per task, and lacks a bunch more features. Just explore the feature list and examples that just has.
It’s simply outdated and mostly lives by the power of defaults and graybeards insisting on its use. Therecs no surprise that things like cmake, nmake, and other tools sprung up to replace it.
All of those look goofy af compared to just.
Anti Commercial-AI license
Make was created for building code, but many people are also using it as a command runner.
Just addresses that use case, but it’s not a replacement for either of those makes.
If you want a really advanced build system there’s shake, which can deal with things like building things that generates dependency information for things that build things. In a nutshell: It’s strictly more powerful than make because (a single invocation of) make operates on a fixed dependency graph while shake can discover dependencies as it goes.
Mostly though you should use whatever comes with the language you’re using, and if you’re doing something simple use make. That includes “link a multi-language project where the components are generated by language-specific systems”. It notably doesn’t include multi-stage compiler builds. GHC switched from recursive make, which is a bad idea, to non-recursive make, which was… arcane, but at least you didn’t have to
make clean
to get a correct build, to shake. Here’s the build system it’s a whole project to itself.You can’t do incremental builds with
just
. I don’t see how it’s a replacement?So it’s like
make
but without incremental builds? Then how is it functionally different from a folder with a bunch of shell scripts in it?Yeah, exactly. I don’t get it.
At first I thought that it was a for-fun pet project, which is fair enough, but it has a dedicated website and a discord server… HUH???
Everything has it’s uses.
make
is maybe good at incremental builds but is (an)used as a task runner which requires the use of “PHONY” in many places, it has about 6 different ways to declare and use variables all with different gotchas, generally has a convoluted syntax, it doesn’t support different interpreters per task, and lacks a bunch more features. Just explore the feature list and examples thatjust
has.It’s simply outdated and mostly lives by the power of defaults and graybeards insisting on its use. Therecs no surprise that things like cmake, nmake, and other tools sprung up to replace it.
Anti Commercial-AI license
Cool