m4 - The Nifty Macro Processor
In the beginning, there was long and complicated code. Then came along functions to make repetitive tasks less repetitive. But not everything can take advantage of functions. Configurations, run-controls, and regular documents seem hopelessly lost. Move over, your now-former best friend, because there is a new tool under your belt.
m4 is more accurately an “old tool”, first appearing all the way back in
1977. Yet another lovechild of UNIX greybeards Brian Kernighan and Dennis
m4 provides the user with a way to define new words and what
they can be substituted with depending on different contexts. In other
words, it functions as a preprocessor. Beats any idea of a
to replace keywords to a pulp. The second best part besides the fact
m4 exists is that if you run a UNIX-like operating system (GNU/Linux,
Macintosh OS X, and other members of the BSD family), it is already
installed. Congratulations, you are the proud owner of a macro processor.
If you expected this post to explain how to use
m4, you will be sorely
disappointed. But you can always check the manuals.
If you deal with code in C (or dare I say C++), you may have noticed
lines such as
#include "header.h" or
#define THING 42. These lines
are handled by a preprocessor specially tailored for C. Theoretically,
you could use the C preprocesor for common text files, but that can
throw it off by a few measures. This is where
m4 shines better than
cpp in many cases.
Rule of Generation
The Rule of Generation is one of the (sadly) lesser-known rules of the famed UNIX philosophy. Long story short, aim for programs that create to speed up the development process.
A common use of
m4 is to create web pages more efficiently. Too many
people have been turned away from automating hypertext markup generation
that they insist on writing it all by hand. Thank you very much, Adobe
Dreamweaver, for instilling this fear.
Those people are insane in my book to think that manually writing markup
is okay. With their new pal
m4, they can instead specify how to create
markup to their own whims. Saves time and it can stay in their style.
Sounds like a win-win deal. At the risk of this next sentence sounding
like a shameless plug, I even utilized
m4 as my site’s backend for
static blog generation. Even managed to cram the template into an
eighty by twenty-four cell screen.
But That’s Not All, Folks
There is a lot more
m4 is capable of than petty text substitution. It
just takes creativity and tinkering to truly grasp its full potential.
Further reading can be found at: