[HN Gopher] GNU Make 4.4 released
       ___________________________________________________________________
        
       GNU Make 4.4 released
        
       Author : chmaynard
       Score  : 80 points
       Date   : 2022-10-31 17:16 UTC (5 hours ago)
        
 (HTM) web link (lwn.net)
 (TXT) w3m dump (lwn.net)
        
       | cryptonector wrote:
       | Yay for .WAIT.
        
       | voigt wrote:
       | I'm using Make for years now but usually only for very basic
       | things. I always feel like it can do much more. Are there any
       | good docs/books/articles about advanced usage of make?
        
         | kazinator wrote:
         | I recommend reading the GNU Make manual in its entirety.
        
         | elchief wrote:
         | Managing Projects with GNU Make, 3rd Edition
         | 
         | https://www.oreilly.com/library/view/managing-projects-with/...
         | 
         | O'Reilly is free via my public library. Yours might have the
         | same
        
         | SoftTalker wrote:
         | I'm a big fan of using a standalone Makefile to manage the
         | build of a project rather than having the IDE do it by "magic."
         | Makefiles can also be used to handle a lot of repetitive
         | processes or tasks that have to happen in a certain order based
         | on dependencies -- they aren't limited to running compilers.
        
           | _wldu wrote:
           | I do this too. I can do anything with vim, Go and a Makefile.
        
           | FrenchyJiby wrote:
           | Very much agree.
           | 
           | [small plug] I've just done a presentation at $Work saying
           | just that:
           | 
           | > By using Makefiles in your repos, you document and automate
           | common "build" tasks.[1]
           | 
           | [1]: https://jiby.tech/presentation/makefiles/makefiles
        
         | coldpie wrote:
         | One thing that's helpful is to study how real-world projects
         | use Make. Try to understand them, and look up pieces you're
         | missing from the reference material. You'll probably end up
         | having to dive into autotools, too, for some of it.
        
         | mturmon wrote:
         | John Graham-Cumming (who's in this thread) wrote this book
         | which I recommend:
         | 
         | https://nostarch.com/gnumake
         | 
         | I just noticed he did some screencasts that make up a course:
         | 
         | https://cloudflare.tv/shows/the-gnu-make-course
         | 
         | And here's links to a bunch of blog posts, from which I learned
         | a lot:
         | 
         | https://blog.jgc.org/2013/02/updated-list-of-my-gnu-make-art...
         | 
         | Of course, the manual itself is really very good!
        
           | nerdponx wrote:
           | > Of course, the manual itself is really very good!
           | 
           | I actually don't agree with this. It's really good as a "user
           | guide", but it's not the best as a "reference manual". It
           | does not always clearly define terms, it freely mixes
           | technical terms and hand-waving language, the writing style
           | tends toward an "expository prose" that makes it hard to find
           | specific pieces of information. In general, it could do with
           | some reorganization using the Diataxis principles:
           | https://diataxis.fr/
           | 
           | It does have pretty good indices, and the quick reference is
           | very helpful. However the HTML version (can't speak for the
           | others) needs a lot more anchors, to make it easy to cross-
           | link to individual elements, rather than just to chapter
           | headings.
        
             | AceJohnny2 wrote:
             | Huh. I actually thought the manual was great, but you make
             | excellent points that I happen to agree with.
             | 
             | I'm very comfortable with the manual _now_ , when I need to
             | look something up, but that's because I've spent years
             | looking things up in it, so I have a fairly good idea where
             | to find things. Even so, it's sometimes confusing, e.g.
             | where to find the definition of automatic variables like
             | `$@`, `$^` and the like? When I started learning Make I
             | remember it being infuriatingly hard to find the entry
             | about a topic of interest.
             | 
             | While the manual is great (as are most of GNU's major
             | works!) _compared to most of the software ecosystem_ [1],
             | you 're quite right that it can still improve a lot.
             | 
             | [1] It's kind of amazing how even a company like Apple can
             | have some pretty underwhelming documentation, see today's
             | post about ExtensionKit
             | https://news.ycombinator.com/item?id=33409558
        
       | dilap wrote:
       | I wonder if I'll ever use a make newer than 3.81. Alas.
        
         | chungy wrote:
         | What was special about 3.81?
         | 
         | Even Debian 9 had Make 4.1. You either have a very old OS or
         | are keeping it around for some reason.
        
           | ixtenu wrote:
           | The GnuWin32 port of Make [1] is version 3.81. I've used it
           | when I needed GNU Make on Windows. I know there are other
           | ways to get newer versions of Make on Windows, but the
           | GnuWin32 port is simple, standalone, and it still works
           | despite its age...
           | 
           | [1]: https://gnuwin32.sourceforge.net/packages/make.htm
        
             | yjftsjthsd-h wrote:
             | Curious; is there some reason that they're using that
             | version of make?
        
               | chungy wrote:
               | It appears the project was abandoned (last release in
               | 2006). Sensible enough, I wouldn't expect newer software
               | to exist in a 2006 release.
               | 
               | I assume GP knows about Cygwin and elects not to use it.
        
               | AstralStorm wrote:
               | There's also Mingw and MSYS versions of GNU Make, if you
               | don't like Cygwin for some particular reason.
        
           | dilap wrote:
           | 3.81 is the last make release that was GPLv2, so that's what
           | is bundled w/ macOS
           | 
           | unfortunate situation.
        
             | alwillis wrote:
             | _3.81 is the last make release that was GPLv2, so that 's
             | what is bundled w/ macOS_
             | 
             | No need to go back over the GPLv2 vs. GPLv3 situation with
             | macOS. There are dozens of threads on HN about it.
             | 
             | However, it's easy to solve in any number of ways; I'd
             | recommend installing Homebrew [1] and using it to install
             | make.
             | 
             | BTW, Homebrew has make 4.4 ready to go; I just installed it
             | [2].
             | 
             | [1]: https://brew.sh
             | 
             | [2]: https://formulae.brew.sh/formula/make#default
        
             | throwawaaarrgh wrote:
             | does anyone develop on a Mac without installing 50 extra
             | tools?
             | 
             | I'll never understand why other developers like Macs. I had
             | to use one for work and it was horrible. I can't imagine
             | paying 2 grand for that!
        
               | synergy20 wrote:
               | same here, i begged and got a dell laptop for linux
        
               | cryptonector wrote:
               | Apparently. I don't understand it. So Apple doesn't
               | bundle the tools you want, so you give up. Wat.
        
               | alwillis wrote:
               | _does anyone develop on a Mac without installing 50 extra
               | tools?_
               | 
               | If you're not developing native apps for any of Apple's
               | platforms, all you need (for starters)
               | 
               | [1] Command Line Tools (just type "xcode-select
               | --install" in the terminal)
               | 
               | [2] Install Homebrew (https://brew.sh)
               | 
               | [3] Install GNU Coreutils (just type "brew install
               | coreutils" in the terminal)
               | 
               | Command Line Tools is the package that contains the
               | compiler (clang), Git and all the expected development
               | tools.
               | 
               | Obviously, depending on what kind of development you're
               | doing, you'll install the runtime packages and utilities
               | you would have installed on Linux, BSD or Windows anyway.
               | 
               | If you're a web developer, for example, you'll probably
               | need to install NodeJS, and a bunch of bundlers, linters,
               | pre/post processors, task runners (Gulp, Grunt, Webpack,
               | Parcel, etc.).
               | 
               | No matter which platform you're on, nobody loves their
               | default terminal emulator, so you'll need to install
               | iTerm2, Alacrity, Kitty or my new favorite, WezTerm.
               | 
               | Oh and the editor! macOS comes with Vim and Emacs, but
               | you'll want your favorite distribution/version/fork. (If
               | you're into VS Code, you can _brew install vscodium_ ).
               | Even if the bundled version is what you want, then
               | there's the plugins, extensions, packages you _need_.
               | Again, regardless of platform.
               | 
               | The point is, no matter what platform you choose, you
               | need to install a bunch of things to get going. macOS
               | isn't significantly worse in this regard.
        
               | saurik wrote:
               | Why did you bother to install Homebrew in step #2,
               | though, if you are unwilling to then use it to install
               | something as trivial as a newer version of make?
        
               | dilap wrote:
               | mostly i use make for small tasks that will also run on
               | other people's computers -- not worth the hassle to ask
               | them to install a newer make just for that.
               | 
               | even for myself, as much as possible i try to just rely
               | on what's built-in, if reasonable. time is precious!
               | 
               | the mac is shitty in a million ways, but it's still by
               | far the least shitty, for me, out of the windows, linux,
               | mac trinity. tho at this point it's been years since i've
               | spent much time non-mac, so maybe the situation has
               | improved -- i'll probably give it another go once asahi
               | linux matures (or its m1 support is adopted by other
               | distros).
               | 
               | (also the arm mac notebook hardware is just insanely
               | good, imo.)
        
           | dgfitz wrote:
           | Centos 7 has v3.82, I'd assume RH7 does as well. Now, its not
           | 3.81, but it's close.
        
             | LukeShu wrote:
             | 3.82 was a pretty big change, it _should_ have been called
             | "4.0" (and they realized their mistake--the very next
             | release was 4.0).
             | 
             | In particular, 3.82 changed how precedence between pattern
             | rules works.
        
             | chungy wrote:
             | CentOS 7 qualifies as very old too ;)
        
             | yrro wrote:
             | GNU Make 4.2.1 is included in Red Hat Developer Toolset 10,
             | in case anyone is feeling... trapped their old EL7 systems
             | ;_)
        
             | bluedino wrote:
             | RH6 has 3.81!
             | 
             |  _I did not just check one of our servers._
             | 
             | :(
        
       | jgrahamc wrote:
       | Tested with GMSL and no incompatibilities:
       | https://github.com/jgrahamc/gmsl
        
       | toddm wrote:
       | Welp, I guess it's time for me to move away from UNICOS...
        
       | sylware wrote:
       | "GNU Make can now be built for MS-Windows using the Tiny C tcc
       | compiler. Port provided by Christian Jullien <eligis@orange.fr>"
       | 
       | Well, I'll use it to compile make on elf/linux.
        
       | sgbeal wrote:
       | Oh no!                 * WARNING: Deprecation!         The
       | following systems are deprecated in this release:           -
       | OS/2 (EMX)           - AmigaOS           - Xenix           - Cray
        
         | sedatk wrote:
         | I'm more surprised that they were able to test those platforms
         | until this release.
        
           | nine_k wrote:
           | VMs and emulators go a long way. Also, this support is (or
           | was) a work of enthusiasts, who keep (or kept) relevant
           | hardware and software alive.
        
         | chungy wrote:
         | My condolences for the 3 users this affects.
        
           | agumonkey wrote:
           | now 4
        
             | chungy wrote:
             | Pretty sure it's just 1 guy running both OS/2 and Xenix.
        
               | thechao wrote:
               | OS/2 runs NYC's metrocard thingy. So, the "users" may
               | (indirectly) include "New York City's entire metro
               | traveling population".
        
         | [deleted]
        
         | bragr wrote:
         | >- Xenix
         | 
         | Does that include only Xenix proper (last release '89), or
         | later SCO derivatives as well (SCO UNIX/OpenServer)? Asking
         | purely out of curiosity.
        
       | nerdponx wrote:
       | > * WARNING: Backward incompatibility!
       | 
       | > Previously each target in a explicit grouped target rule was
       | considered individually: if the targets needed by the build were
       | not out of date the recipe was not run even if other targets in
       | the group were out of date. Now if any of the grouped targets are
       | needed by the build, then if any of the grouped targets are out
       | of date the recipe is run and all targets in the group are
       | considered updated.
       | 
       | This is a welcome change! I always thought this was how Make
       | worked anyway, until I tried it and it didn't. Unfortunately none
       | of my coworkers using stock Make on their Macs can benefit, but I
       | can also insist that they install v4.4 since they all have
       | Homebrew already.
       | 
       | > .WAIT
       | 
       | What's a use case for this? Is the idea that you can use it for
       | explicitly sequencing build order of dependencies, without making
       | them actually dependent on each other? Why would you want that?
       | 
       | > let, intcmp
       | 
       | The Turing Tarpit grows... do we have a Scheme interpreter in
       | Make yet?
        
         | david2ndaccount wrote:
         | Yes, actually:
         | https://www.gnu.org/software/make/manual/html_node/Guile-Int...
        
           | nerdponx wrote:
           | Hah, I meant a Scheme interpreter implemented in a Makefile.
        
         | [deleted]
        
         | ufo wrote:
         | I tried reading that part of the changelog a bunch of times but
         | my brain is having a difficult time parsing it... Could someone
         | please give us an example of what's that problem with the
         | grouped targets?
        
         | rurban wrote:
         | > What's a use case for this? Is the idea that you can use it
         | for explicitly sequencing build order of dependencies, without
         | making them actually dependent on each other? Why would you
         | want that?
         | 
         | To introduce concurrency unsafety by deadlocks.
        
         | LukeShu wrote:
         | > > .WAIT
         | 
         | > What's a use case for this? Is the idea that you can use it
         | for explicitly sequencing build order of dependencies, without
         | making them actually dependent on each other? Why would you
         | want that?
         | 
         | A use-case that I've wanted this for for a long time is to have
         | build phases. `make install` should build things if necessary;
         | but it'd also be great to have it build _everything_ before it
         | installs _anything_.
        
       | teddyh wrote:
       | Better link: https://lists.gnu.org/archive/html/info-
       | gnu/2022-10/msg00008...
       | 
       | If this wasn't LWN, I'd call it "blogspam", but I know LWN does
       | this to have their own archive which they can link to. But this
       | does not mean that there's any good reason for anyone outside of
       | LWN to use LWN's copy of the announcement, unless the original
       | link had gone stale or something.
        
         | [deleted]
        
         | LukeShu wrote:
         | They're both just mailing list archives; and HN has never
         | really preferred one archive over another; even one when is
         | "first party".
         | 
         | Heck, most LKML posts get posted as lkml.iu.edu or lwn.net;
         | rather than lore.kernel.org or lkml.org.
        
           | teddyh wrote:
           | LWN is not a general mailing list archive; AFAIK, LWN only
           | archives the posts which they want to link to in an
           | accompanying or related article. LWN does not, AFAIK, archive
           | every post on, in this case, the info-gnu list.
        
             | LukeShu wrote:
             | I had been under the impression that LWN does archive the
             | entire ML; but it seems that I was mistaken and that you
             | are correct.
        
       ___________________________________________________________________
       (page generated 2022-10-31 23:02 UTC)