IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    autotools 教程:GNU 构建系统简介

    Ma Kai发表于 2016-07-01 00:23:04
    love 0

    谈谈这个系列

    我以前写过一个 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®」是微软公司的注册商标。


沪ICP备19023445号-2号
友情链接