make utility is an enticing servant, always there and always accommodating. Like the indispensable sidekicks found in many novels and movies,
make starts out as the underappreciated supplicant to whom you throw a few odd jobs, and then gradually takes over the entire enterprise.
I had reached the terminal stage of putting
make at the center of every project I touched when Steve Talbott, my supervisor and the author of the original O’Reilly classic Managing Projects with make, noticed my obsession and asked me to write the second edition. It proved to be a key growth experience for me (as well as a pretty wild ride) and my entry into the wonderful world of O’Reilly, but we didn’t really think about how long the result would stay on the market. Thirteen years for one edition?
Enthralled in the memories of those days long ago when I was a professional technical writer, I’ll indulge myself with a bulleted list to summarize the evolution of
make since the second edition of Managing Projects with make hit the stands:
The GNU version of
make, already the choice of most serious coders when the second edition of the book came out, overran the industry and turned into the de facto standard.
The rise of GNU/Linux made the GNU compiler tool chain even more common, and that includes the GNU version of
make. As just one example, the Linux kernel itself relies heavily on extensions provided by GNU
make, as documented in Chapter 11 of this book.
The adoption of a variant of BSD (Darwin) as the core of Mac OS X continues the trend toward the dominance of the GNU tool chain and GNU
More and more tricks are being discovered for using
make in a robust, error-free, portable, and flexible way. Standard solutions to common problems on large projects have grown up in the programming community. It’s time to move many of these solutions from the realm of folklore to the realm of documented practices, as this book does.
In particular, new practices are required to adapt
make to the C++ and Java™ languages, which did not exist when
make was invented. To illustrate the shifting sands of time, the original
make contained special features to support two variants of FORTRAN—of which vestiges remain!—and rather ineffective integration with SCCS.)
Against all odds,
make has remained a critical tool for nearly all computer development projects. None of
make’s many (and insightful) critics would have predicted this 13 years ago. Over these years, replacements sprang up repeatedly, as if dragon’s teeth had been sown. Each new tool was supposed to bypass the limitations in
make’s design, and most were indeed ingenious and admirable. Yet the simplicity of
make has kept it supreme.
As I watched these trends, it had been in the back of my mind for about a decade to write a new edition of Managing Projects with make. But I sensed that someone with a broader range of professional experience than mine was required. Finally, Robert Mecklenburg came along and wowed us all at O’Reilly with his expertise. I was happy to let him take over the book and to retire to the role of kibitzer, which earns me a mention on the copyright page of this book. (Incidentally, we put the book under the GNU Free Documentation License to mirror the GPL status of GNU
Robert is too modest to tout his Ph.D., but the depth and precision of thinking he must have applied to that endeavor comes through clearly in this book. Perhaps more important to the book is his focus on practicality. He’s committed to making
make work for you, and this commitment ranges from being alert about efficiency to being clever about making even typographical errors in makefiles self-documenting.
This is a great moment: the creation of a new edition of one of O’Reilly’s earliest and most enduring books. Sit back and read about how an unassuming little tool at the background of almost every project embodies powers you never imagined. Don’t settle for creaky and unsatisfying makefiles—expand your potential today.
Editor, O’Reilly Media
August 19, 2004