Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I adore Make. I've written one (or more) for every single task or project I've touched in the last 20 years.

No smarts. It's just a collection of snippets with a few variables. "make run", "make test", "make lint", that kind of thing.

"make recent" = lint then run the most recently modified script.

You could do the same thing with Bash or other shells, but then you get stuck into Developer Land. Things are so much more complicated, without giving extra value. Make is just a DSL saying "files like this, are made into files like that, by running this command or two". That's it.

This is incredibly powerful!



> Make is just a DSL saying "files like this, are made into files like that, by running this command or two".

Nicely put.

Decades ago i wrote a testing framework in java where you could specify your tests and their dependent classes using make-like syntax. So you could have a set of test classes which define the "baseline suite", then another layer of test classes which is dependent on the above and only run if the above is successful and so on.

I really do not understand why folks today make everything so complicated. My advise has always been, stick to standard Unix tools and their way of doing things (tested and proven over time) unless you run into something which could absolutely not be done that way. Time is finite/limited and i prefer to spend it on System/Program Design/Modeling/Structure/Patterns etc. which are what is central to problem-solving; everything else is ancillary.


Somehow every make file I’ve encountered in the wild is a lot more than “that’s it”


That just rosy tinted glasses most of the historical users are wearing. It takes time and nerve to admit that you have decades of experience with a footgun that isn’t even trivial to use beyond tutorial/builtin use cases.


Likewise! I haven't been using them in the past, but at my current position almost every repository has a Makefile.

Running `make test` and knowing it will work, regardless of the stack, language, repo is a huge lifesaver.


> Make is just a DSL saying "files like this, are made into files like that, by running this command or two". That's it.

The problem with make isn’t make - it’s that what makes calling usually doesn’t do that anymore. On my last project we had a makefile that had 4 main commands - build test frontend deploy. Build and test called through to maven, frontend called npm, and deploy called docker + aws.

All of those tools do their own internal state tracking, caching, incrementalness and don’t report what they’ve done, so it’s not possible to write a molecule that says “only deploy if build has been updated” because maven/cargo/dotnet/npm/go don’t expose that information.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: