You shouldn't hard-code gcc. make has an implicit CC variable for this: <a href="https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html" rel="nofollow">https://www.gnu.org/software/make/manual/html_node/Implicit-...</a><p>Your makefile will then work on systems without gcc, and it is also easier to override it, ie:<p><pre><code> make CC=clang</code></pre>
Make is a great tool. I mostly use it to remember repetitive tasks, like running python tests, not as a build system. Works even better for this. What annoys me deeply is that gnu make isn’t available on windows, e.g git bash.
I really don't know the first thing about C or makefiles o anything related, but I was browsing the code out of general curiosity and I have a question.<p>Would this code benefit from better variable names or is it just that I don't know the domain and this is good understandable code? I'm honestly curious.<p>This happens a lot with C code examples here.
There's a larger discussion on this topic at <a href="https://news.ycombinator.com/item?id=19052830" rel="nofollow">https://news.ycombinator.com/item?id=19052830</a>.
For lots of things, and especially if you stick to the Unix Philosophy or Suckless Philosophy, this Makefile is all you need. I personally add ‘install’, ‘uninstall’, ‘clean’, and ‘superclean’ targets to my projects but this is a really great start.
I understand there's lots of build systems out there with better scripting languages, but is there anything else that can challenge make for simplicity and portability (although I guess you could export Makefiles)?
Unfortunately, the reality is never as simple as that. Your makefile will grow like a tumour once your project grows: Specific dependencies, OS and compiler related flags and switches, special folder structures, etc etc.