Live data from Hacker News

Time for Makefiles to Make a Comeback

medium.com

91–100 of 116 posts

Re: Time for Makefiles to Make a Comeback

#91
post #66

Earlier quoted context omitted.

The data model of makefiles is perfect for watching and rebuilding. All you need to add is something that monitors the source files for any changes and runs 'make'.

You lose incremental builds of modern bundlers/transpilers, which makes your build time too slow for bigger projects. People nowadays expect to see changes almost in realtime using hot module replacement etc.

That's because those tools aren't designed to play well with others. It's not due to the design of make.

Re: Time for Makefiles to Make a Comeback

#92
post #34

If you compare Makefiles to the JavaScript ecosystem it will do so favorably, but many things will. Make is a good build system but it is a shitty deployment system. Yes, you can do everything you want if you put enough effort in it as it is a complete scripting system, something many alternatives are not. It does not mean that it is a good idea to do so. Recently a client made me begrudgingly try Maven. 'Yet another…

Eh, different strokes. Every time I have to use Makefiles I yearn for the comparative flexibility and simplicity of the JS ecosystem. Make files just seem good to users of the due to experience. They work, but let’s not pretend they’re easy to work with.

> simplicity of the JS ecosystem

[citation needed]

Re: Time for Makefiles to Make a Comeback

#93

Earlier quoted context omitted.

Eh, different strokes. Every time I have to use Makefiles I yearn for the comparative flexibility and simplicity of the JS ecosystem. Make files just seem good to users of the due to experience. They work, but let’s not pretend they’re easy to work with.

> simplicity of the JS ecosystem [citation needed]

Citation: I work with it every day. You can make it complex but that’s true of everything.

It’s not hard or complex to get working initially, or maintain, which is not true of makefiles

Re: Time for Makefiles to Make a Comeback

#94

I'm confused So its agreeable that the building pipeline of NPM calling some packer does replace any-other-language calling any-other-packer, but what is the point in replacing the role of `npm build`, with a makefile that just calls what npm would of called anyways? replacing make with npm with make-calling-npm?

I agree, why add make (which version?) as a dependency when you can make sure that the project can build with just node installed.

Re: Time for Makefiles to Make a Comeback

#95

I've been using make files constantly since '76 when I first started programming in (US) 5th grade. It has been one of my career amusements watching the build systems come and go. I gave up talking about Make years ago. There is a huge population of us that smile and get things done, while others screw around with new, complicated, never-learned-the-past tools. I use one of the earliest Make versions that barely does…

> There is a huge population of us that smile and get things done, while others screw around with new, complicated, never-learned-the-past tools. They get the things done they've been doing all along. But build metadata is very important and very hard to extract from Makefiles, especially as builds increase in complexity. You need things like search paths accessible to get IDEs, static analyzers, software packaging s…

I don't understand your reasoning here. Make can call any program, and contain as many build targets as you would ever need. If some task can't be accomplished in Make itself or existing CLI programs, you write something that does that one task well, then ensure Make runs it whenever needed, even if that's every build.

Re: Time for Makefiles to Make a Comeback

#96
post #95

Earlier quoted context omitted.

> There is a huge population of us that smile and get things done, while others screw around with new, complicated, never-learned-the-past tools. They get the things done they've been doing all along. But build metadata is very important and very hard to extract from Makefiles, especially as builds increase in complexity. You need things like search paths accessible to get IDEs, static analyzers, software packaging s…

I don't understand your reasoning here. Make can call any program, and contain as many build targets as you would ever need. If some task can't be accomplished in Make itself or existing CLI programs, you write something that does that one task well, then ensure Make runs it whenever needed, even if that's every build.

You could write make rules to do about anything, sure. But you don't want to have to rewrite those rules for every project. You want make modules that you can reuse from project to project. Those are notoriously hard to get right. And when they are done correctly, they are hard to share across organizations, or even within large organizations.

In particular, I write a lot of C++. I want targets for gcov, g++, gtest, dpkg, rpm, clang-format, clang-tidy, cppcheck, clang, CLion, Eclipse, ctags, and include-what-you-use. Am I supposed to maintain each of those targets on each of my repos?

It's simpler to have a standard place with all the needed source files, binaries, search paths, definitions, etc., and just wire that data up to each extra target.

Re: Time for Makefiles to Make a Comeback

#97

I have a theory that the people who love make are the same people who love macros and the people who hate make don't love them. I wrote a book on make and I fully recognize that there are people who look at what I've written there and think I'm completely mad: https://www.nostarch.com/gnumake Make's greatest irony is that it's a system for building files based on dependencies but has no way of actually discovering de…

(disclaimer: I like make but not macros) > And make has deficiencies that are a nightmare to work around and get right (e.g. spaces in filenames, recursion, ...) Yes! we seem to be stuck in a local maximum with make. I wrote my own make replacement, as have many before me, and learned the folly of my own ways. Nowadays I use (and love) make despite its terrible handicaps, but I really wish there were something fundam…

Shake is similar to Make with some improvements (it is a Haskell DSL), I have not used it, but it looks good.

http://shakebuild.com/

Re: Time for Makefiles to Make a Comeback

#98
post #25

Make provides awesome UX: in most cases you just type "make" and stuff just works, but there is a tradeoff: it's nearly impossible to write a crossplatform make file. Why you ask? Try copying a file (or directory) from one location to another, sure "cp", but it's -R is different on Linux and macOS! And then comes Windows - there is no good built-in alternative to "cp" as it's hard to make "xcopy" to ignore failures i…

maybe projects should have their own ./bin folder for make to use and have those command refer to the right native command. mixing make with a modern scripting language would make this possible.

GNU Make has built in support for scheme

Re: Time for Makefiles to Make a Comeback

#99
post #95

Earlier quoted context omitted.

I don't understand your reasoning here. Make can call any program, and contain as many build targets as you would ever need. If some task can't be accomplished in Make itself or existing CLI programs, you write something that does that one task well, then ensure Make runs it whenever needed, even if that's every build.

You could write make rules to do about anything, sure. But you don't want to have to rewrite those rules for every project. You want make modules that you can reuse from project to project. Those are notoriously hard to get right. And when they are done correctly, they are hard to share across organizations, or even within large organizations. In particular, I write a lot of C++. I want targets for gcov, g++, gtest,…

I also write C++ and am not aware how to comfortably automate all that with a single build tool. Is it some sort of cmake extensions? Can you please share your setup?

Re: Time for Makefiles to Make a Comeback

#100
post #16

For a better "make" try "do" (also known as "DJB redo"). It's designed by Dan Bernstein of crypto fame and implemented by Avery Pennarun now at Google. http://apenwarr.ca/log/?m=201012#14 I will contribute $100 to any Rust leader who wants to start coding "do" in Rust.

+1 for do/redo. Although it can be a bugger to get right for go (because there's no intermediate files) (although I think I've solved that now.)

I looked at your profile, but didn't see any clues. Please share?

How do you use redo for go projects?

Post reply on HN