* If you need portability, Makefiles are hard.
* The whitespace design of Makefiles is bad and has swallowed up countless debugging hours over the years. This design flaw isn’t intrinsic to the way Makefiles work, it’s just a lousy artifact from a superficial decision from decades ago: to change behavior based on distinctions invisible in source code. It’s mitigated by syntax highlighting but still bites people.
* Makefiles are dependent on the consistency of the build environment, for example the availability and behavior of command line switches. Even if your project doesn’t need OS platform portability, this is still a pain across time and requires external tooling to manage.
* There are certain subtleties to the way Makefiles behave that are addressed by `.PHONY`. I agree that these are manageable in the absence of other complexities, but they contribute towards Makefiles being more difficult than appears at first.
I’m sure you’re familiar with those critiques and others. They may not bother you, but you don’t speak for everybody.
Part of the premise of Make is its ubiquity, but if you can’t rely on that save as a simple bootstrap (as you seem to be doing) then why not forego it for something else?
Because blindly ditching a technology for no reason at all is not a way to fix problems.
Oh yes, in the good old tradition of "... as long as it's some Linux on x86".
[...] on Linux 2.6+ (or WSL) using GNU Make.
Sorry, it's actually AMD64 _and_ ARM64!You name any technology and anyone can enumerate dozens of projects that use it wrong.
But seriously: can I take a look at it (Soource + Makefile)?
I like how the includes are separated and commented.
Also if you weren't already familiar with their work you might be interested in giving this a read: https://justine.lol/ape.html
% grep '^include' Makefile -c
159
includes with % wc --lines --total=only $(awk '/^include/{ print $2 }' Makefile) Makefile
22547
lines in total really count as having a single makefile? I have no dog in this fight, just wondering.Now show us the Makefile.