• smeg@feddit.uk
    link
    fedilink
    English
    arrow-up
    0
    ·
    2 days ago

    Do all three of them still treat tabs and spaces as functionally different? If so then they’re all in the bottom category.

  • I really like Ruby’s rake. It’s an actually sane language and quick to learn. No idiosyncratic shell scripts cobbled together. The makefile is written in plain Ruby. That also makes it super powerful to adapt to your needs. Nor parsing XML. Just load your rake file into your interactive Ruby shell (I’m partial to pry), try things, test it. Our time for debugging build errors dropped to a fraction.

    I have used it build C++, Objective-C, and Java projects for a medium sized company. Before that we used ant with XML build files from hell.

    • takeda@lemm.ee
      link
      fedilink
      arrow-up
      0
      ·
      2 days ago

      Make was created for building code, but many people are also using it as a shortcut for CLI commands.

      Just addresses that use case, but it’s not a replacement for either of those makes.

      • barsoap@lemm.ee
        link
        fedilink
        arrow-up
        0
        ·
        1 day ago

        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.