"Covers GNU Make basics through advanced topics, including: user-defined functions, macros, and path handling; creating makefile assertions and debugging makefiles; parallelization; automatic dependency generation, rebuilding targets, and non-recursive Make; and using the GNU Make Standard Library"
Even though this HN post is about GMSL specifically, I want to use it to thank you for writing "The GNU Make Book"[0]. It was a veritable treasure trove that greatly increased my competency with GNU Make.
The experience of using that book, and playing with GMSL, was one of the sparks that inspired me to start experimenting with Guile-enabled GNUMakefiles (no public release yet.)
[0] My tech books are packed at the moment, so I can't be sure but: I have a fuzzy memory that your book originally had a different title, or at least a different cover?
EDIT: seems I have nostarch PDF, so I'm probably conflating two memories.
EDIT 2: Hold-up, I have this in my CREDITS file:
The author would like to thank the following
people for their insights:
* Scott McPeak for his article "Autodependencies with GNU make"
available at http://scottmcpeak.com/autodepend/autodepend.html
* John Graham-Cumming for his indispensible book, "The GNU Make Book"
(formerly known as "GNU Make Unleashed") ISBN: 978-1-59327-649-2Or, you might get more clever and say "when only a comment is changed, I don't want to rebuild"; file checksums are not the correct solution for this, so you can code another trigger.
That feels like an outdated statement, make 4.0 came out in 2013. The only non-EOL system I can think of off the top of my head that isn't shipping >=4.0 is macOS (because they won't upgrade to anything GPLv3).
However, unfortunately there's a popular CI system (cough CircleCI cough) that's still using Ubuntu 14.04 by default, which has been EOL for almost a year now. (And others, such as Travis-CI, used it by default right up until it was EOL).
Oh, if you appreciate gmsl, you might also appreciate a book by the same author ('jgrahamc), The GNU Make Book. Some of the things in gmsl are certainly hacks, but a lot of it is quite reasonable if you start reading Make macros as "lisp, but with a bunch of extra dollar-signs and commas".
For learning advanced techniques: "The GNU Make Book" by John Graham-Cumming.
The apenwarr implementation includes a full Python implementation as well as a minimal version in < 200 lines of sh. The minimal version doesn't support incremental rebuilds -- the out-of-date-ness tracking in the full Python version uses sqlite -- but it's good for understanding the redo concept. Also good for embedded contexts.
I used the full redo implementation for some data processing tasks once, with mixed results. It was a situation where I couldn't declare the dependency graph up front. With redo, each target declares its dependencies locally when it builds, and redo assembles and tracks the dynamic dependency graph. It's pretty neat, but become difficult to reason about and debug. Could be that I never got comfortable with the new paradigm, or could be that essential tooling was missing, not sure. I still think redo is promising.
Anyway after a decade of messing with shiny new build tools, I finally learned to stop worrying and love the bomb (make). It's weird and warty but surprisingly capable. Worth the learning investment. Oh and jgrahamc's "GNU Make Book" is great. [2]
[0] https://github.com/apenwarr/redo