7
1
2016
0

autotools 教程:GNU 构建系统简介

谈谈这个系列

我以前写过一个 10 分钟入门 Autotools 的文章,但是弄丢了,而且困于俗务,又好久没有敲打键盘,因此自己也都不会用 Autotools 了,便计划重新系统地学习一遍。这部教程打算作为学习的产物,以飨大众。计划完整涵盖 autotools 的常见用例,包括 m4, autoconf, automake, intltool, libtool 及多语言混合编程、单元测试,共 7 篇。

这个系列的撰写对我个人而言意义会更大,因为我会尝试在撰写中使用较多自由软件技术,点亮更多技能点。

在该系列中,我会力求阐明 GNU 构建系统的来龙去脉。我的机器使用 Debian Jessie 系统,autotools 各组件版本如下:

  • autoconf 2.69
  • automake 1.14.1
  • libtool 2.4.2
  • intltool 0.50.2

此外,该系列也会尽量从现代视角出发,争取不牵扯到无聊的历史细节中去,使知识可以立即转化为技能。

这部教程假定读者对 Linux 桌面编程有初步的认知,即会使用 C 语言、了解 C 语言程序和库的编译流程、会编写简单的 Makefile、知道程序国际化和本地化的流程和基本工具。

另外,这套教程建议读者先通读一遍,此后再按需查阅,因为其中的例子是随着行文逐渐发展的,如果不通读一遍可能不知道我在写什么。

什么是 GNU 构建系统?

如今,我们已经渐渐遗忘了历史上兵荒马乱的 UNIX 战国时代。在那个时代,各 UNIX 实现有不少出入,要编写可移植程序实属困难,故许多程序存在一个 configure 脚本生成进行一些预先配置。

而现在,我们几乎只需考虑 *BSD(含 Mac OS X)、Linux® 和 Microsoft® Windows®,而前两者又差别不大,因此现在 configure 脚本存在的意义已经不像以前那么大了。

熟悉 *NIX 系统的诸位,不可能对以下流程感到陌生:

./configure --prefix=/usr
make
sudo make install

那么,我们如何在自己的程序中用到这个呢?又如何对其进行定制,使之符合我们自己的心意呢?GNU 构建系统——Autotools 就是自动化该流程的一整套工具。

Autotools 包括以下工具:

  • autoconf —— 生成 configure 脚本
  • automake —— 生成 Makefile
  • libtool —— 处理静态库、动态库之事宜
  • intltool —— 将你的程序国际化(英文叫做 internationalization,因为太长所以缩
    写为 i18n)

另外,还有 autoscan 之类的小工具,因为用处不大,所以本教程不予使用。

我们将通过例子,一个一个考察这些工具。下面是一幅 Autotools 关系图:

(该图形由 GraphViz 绘制)

说真的,autotools 到底有什么用?

这个要列出来,真的还挺多的。

  1. 用户熟悉的操作流程
  2. 完善的国际化支持
  3. 完善的动态与静态库支持
  4. 肉眼可读、易于编辑的文件格式(与之相对,没有太好的 IDE 支持)
  5. 可以极简单地实现交叉编译

如果你是 GNOME 开发者,你应该知道,GNOME 的所有程序都是 Autotools 构建的,所有库都对 Autotools 有完善的支持,用起来非常方便。

其他声明

  • 「Linux®」是林纳斯·托瓦兹的注册商标。
  • 「Microsoft®」和「Windows®」是微软公司的注册商标。
Category: 技术 | Tags: autotools-tut | Read Count: 1008

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Powered by Chito | Hosted at is-Programmer | Theme: Aeros 2.0 by TheBuckmaker.com