{"id":1220,"date":"2009-09-23T13:31:41","date_gmt":"2009-09-23T11:31:41","guid":{"rendered":"http:\/\/daniel.haxx.se\/blog\/?p=1220"},"modified":"2013-01-14T12:51:06","modified_gmt":"2013-01-14T11:51:06","slug":"autotool-alternatives","status":"publish","type":"post","link":"https:\/\/daniel.haxx.se\/blog\/2009\/09\/23\/autotool-alternatives\/","title":{"rendered":"Autotool alternatives"},"content":{"rendered":"<p>Lots of people whine and complain on the set of build tools we often refer to as a collective by the term &#8216;autotools&#8217;. That term tends to include <a href=\"http:\/\/www.gnu.org\/software\/autoconf\/\">autoconf<\/a>, <a href=\"http:\/\/www.gnu.org\/software\/libtool\/\">libtool <\/a>and <a href=\"http:\/\/www.gnu.org\/software\/automake\/\">automake<\/a>.<\/p>\n<p>I think a certain amount of criticism is warranted against this family of aged tools that are unix-centric, have cryptic ways to control them (I think there&#8217;s a reason m4 macros\u00c2\u00a0 is not widely used&#8230;) and they are several independent tools with a tricky mix of cross-breeding.<img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1225\" style=\"margin: 8px;\" title=\"A build tool\" src=\"http:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2009\/09\/309824_X_2007-07-04_145821_411.jpg\" alt=\"A build tool\" width=\"155\" height=\"80\" srcset=\"https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2009\/09\/309824_X_2007-07-04_145821_411.jpg 155w, https:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2009\/09\/309824_X_2007-07-04_145821_411-150x77.jpg 150w\" sizes=\"auto, (max-width: 155px) 100vw, 155px\" \/><\/p>\n<p>The upsides include them being well tested, fairly well known, there&#8217;s a wide range of existing tests done for them, they work fine when cross-compiling and they support building out-of-source tree just fine.<\/p>\n<p>But what about the alternatives?<\/p>\n<p>I spend time in projects where the discussion of ditching autoconf come up every once in a while, as sure as that the sun will rise tomorrow. The discussion is always that tool <strong>Z<\/strong> is much better and easier to deal with and that everything gets shiny if we just switch. That <strong>Z <\/strong>is a lot of different tools that are available today, including <a href=\"http:\/\/www.cmake.org\/\">CMake<\/a>, <a href=\"http:\/\/www.scons.org\/\">scons<\/a>, <a href=\"http:\/\/code.google.com\/p\/waf\/\">waf <\/a>or <a href=\"http:\/\/cdetect.sourceforge.net\/\">cDetect<\/a>.<\/p>\n<p>The problem as I always see and why I almost always argue against Z is that autoconf is old, trusty, proven and I know it. The Z tool is often much newer, less proven, less peoeple involved in the project know Z, use Z or know how to customize it (since new tests will be needed and some tests will need to be changed etc). So even though Z is sometimes accepted as a testing ground in my projects, a year or two after the Z was accepted &#8211; unless I myself have accepted it and joined its efforts &#8211; Z has lagged behind to a point where it isn&#8217;t good anymore since I don&#8217;t know it and most people are rather fixing the traditional autoconf stuff. So we extract the Z support again.<\/p>\n<p>But if we would never accept new tools we would never evolve, and yes indeed autoconf and friends have their share of flaws.<\/p>\n<p>The question is of course when to switch &#8211; what kind of project in what development state etc &#8211; and which alternative that is useful for a particular project. Me being a developer primarily working with plain C and working with lowlevel code and libraries mostly will no doubt have a different view than those who use other languages, who do more &#8220;apps&#8221; or perhaps even GUI programming&#8230;<\/p>\n<p>Can you help me point out good build system comparisions and overiews? I&#8217;ve tried to find good comparisions but I failed. Just about all of them are written by the authors of one of these tools.<\/p>\n<p>My ambition is to create some sort of comparison document myself. I think the comparison could include autotools, cmake, waf, scons, cdetect, qmake and ant. Any more?<\/p>\n<p>(I got triggered to write this blog post after <a href=\"http:\/\/sourceforge.net\/mailarchive\/message.php?msg_name=alpine.DEB.2.00.0909201541060.8217%40tvnag.unkk.fr\">my post to the trio mailing list on this topic<\/a>.)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lots of people whine and complain on the set of build tools we often refer to as a collective by the term &#8216;autotools&#8217;. That term tends to include autoconf, libtool and automake. I think a certain amount of criticism is warranted against this family of aged tools that are unix-centric, have cryptic ways to control &hellip; <a href=\"https:\/\/daniel.haxx.se\/blog\/2009\/09\/23\/autotool-alternatives\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Autotool alternatives<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,6],"tags":[267,37,419,265],"class_list":["post-1220","post","type-post","status-publish","format-standard","hentry","category-development","category-floss","tag-autotools","tag-build","tag-development","tag-trio"],"_links":{"self":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/1220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/comments?post=1220"}],"version-history":[{"count":9,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/1220\/revisions"}],"predecessor-version":[{"id":4694,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/1220\/revisions\/4694"}],"wp:attachment":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/media?parent=1220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/categories?post=1220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/tags?post=1220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}