最近一直在看Linux下Autotools工具的使用方法,查阅了一些资料,感觉入门级别的文章网上写的很多,但写的清楚明白的应该是下面这篇。
A brief introduction to Autoconf
【评论】有一些小例子特别好,这篇文章让我从直观上了解并初步认识到了configure.ac中AC_OUTPUT的作用。这点儿一解开,就感到有几个小问题能够想明白了。
视频教程推荐下面这个
杨士清 autoconf
上面的链接是slidershare.net的,在youtube.com上有相关的视频讲解,前后大约有3个小时。
【评论】讲解清晰,要耐着性子看完。因为是台湾人讲的,所以有些名词不太一样。在杨老师的讲解中,第一次搞明白了autoscan、autoconf和各个文件之间的关系,他们是如何生成的,文件的作用是什么。如果能看完此视频,并动手将练习做一遍,基本上应该会有比较好的理解了。
而完整详细,写的特别棒的是这本书:
Autoconf, Automake and Libtool
【评论】作者参与了autotools的项目,因此对autotools工具有深刻的理解。此书不适合初学者阅读,应该先看完【杨士清】的视频讲解之后,动手做几个练习,再回头看此书。这本书需要仔细的阅读,有些例子需要自己跑一下。特别需要指出的是该网站上给出的autotools中各个工具的关系图简直是太棒了,是我迄今为止见到的最完整、描述最为准确的关系图,其他blog上给出的关系图都是不完整的,有的关系图甚至是错误的。
【书摘】
第二章详细讲解了autotools工具的历史。
最早出现的一个小工具是autoconf。1970年开始,Unix系统被多个科研单位和大学院所使用,他们对其进行改造,因此出现了各自的库系统。那么,一款软件编译之前,首先要判断当前的是哪款Unix系统,这就是autoconf出现的原因。这就明白了,autoconf基本功能就是对当前系统运行环境进行全面检查,这也就是为啥与autoconf密切相关的confiugre.ac文件中到处都是XXX_CHECK这样的东西。
各位Unix的前辈们意识到了一个称之为“protable”可移植性的问题,于是各自纷纷开始在这方面做工作。大伙的思路都是相似的,就是把移植工作变换为了两步走。
直白来说,configure文件里明确指出了当前软件需要的系统环境,一旦OS满足了这些环境要求,就可以运行make文件build目标OS上的可执行文件了。configure文件本身是无法完成测试的,他必须要转化为一条条具体的脚本语句,才能完成目标OS的测试。
由于所有的Unix系统都无条件的支持Bourne shell,这样一来,在所有的Unix操作系统和由此派生的OS系统上就可以用一种语言进行系统测试,这就是sh脚本语言。让程序员自己编写脚本语言测试一下目标系统的运行环境,是一件很有技术含量的工作,不能每个程序员都能做到。于是帮助生成sh脚本语言的configure文件就由此诞生。可以想象configure一定是比较容易编写了(虽然还是挺有难度),但总比编写sh脚本要好多了。