3 ms·
auto-generating Makefiles produces awful Makefiles in the same way auto-generating code produces awful code. If it was the only way of creating Makefiles, it m
by richardwhiuk 9y ago
auto-generating Makefiles produces awful Makefiles in the same way auto-generating code produces awful code.
If it was the only way of creating Makefiles, it might be a valid complaint against Makefiles, but it isn't. It's not even a useful thing to do.
- jchw 9y ago>auto-generating code produces awful code. I disagree with this notion. Code generation is limited by the approach, the input information and the output language. Make is (subjectively) an ugly language, text macros are a bad approach. That's why autotools sucks in my opinion. OTOH, approaches like Go's 'Stringer' are pretty clever and useful, and generate good code from many PoVs. >It's not even a useful thing to do. Look, if you write nice, minimal Makefiles, that's great. It's not what I was talking about. I know autogenerating Makefiles sucks. I prefer Makefiles like those from projects like musl. But some projects are too big and complicated. If I want to target a huge number of platforms while also supporting cross compiling, Make starts to break down rapidly. Out of tree builds are also a pain. Tools like qmake and autotools can alleviate this by autogenerating Makefiles and project files abstractly. That way, I don't have to make configuration decisions on every single invocation. This gets especially tedious if you need to run pkg-config many times or sdl-config, or maybe some platform dependent things, or what have you. Or if you want to do things Make isn't good with, like recursing or acting on a wildcard of files. Soon enough your Makefile is calling find and relying on the BSD or GNU version of find, someone tries to run it on MinGW and gets confused by the weird argument error with find. Lots of people use Make for it's ability to concurrently run tasks with dependencies. This program presents just that part of make with a declarative syntax that is easily generated programmatically. If you don't see a point, I can understand. Personally, I have no plans to use Cr. But if I was writing a kind of build system that generated a manifest, I'd rather generate a YAML manifest than a Makefile.