[译文] 如何开始一个真正的 GTK 项目(第二部分:配置 Autoconf)

原文地址:Advanced GTK Techniques


在这个教程中,你将学习如何创建一个空的 Autotools 编译系统。这是《如何开始一个真正的 GTK 项目》的第一章节。


首先,我们创建一个名为 app-skeleton1 的目录。在这个目录中再创建名为 Makefile.am 的空文件(可以在终端中使用 touch Makefile.am 命令),这是一个 Automake 文件,我们将在稍后在这里输入如何将代码转换成程序的指令。现在,我们需要使用 Autoconf 配置我们的项目。

在当前用目录下新建一个 configure.ac 文件,它是 Autoconf 的配置文件,定义了在编译工程时需要使用哪些工具。我们也需要在这里定义系统环境需求,这样 Autotools 可以检测系统是否满足要求。在 configure.ac 中,我们输入:

AC_INIT([App Skeleton], [1], [philip.chimento@gmail.com])
AM_INIT_AUTOMAKE([-Wall foreign])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

这个文件中包含了可以被 Autoconf 扩展成脚本的各种宏。以 AC_ 开头的是 Autoconf 自己的宏,以 AM_ 开头的则属于 Automake。宏的参数列表被包含在一对圆括号中,每个参数还被包含在一对方括号内。方括号在这里表示“引用”,在 Autoconf 的手册中有关于它的详尽介绍,我们只需要记住一点:每个参数都要用方括号括起来。接下来我们一个一个介绍这些宏。

  • AC_INIT

    这是 Autoconf 的初始化宏,定义工程的名称和版本号。第三个参数为可选参数,是反馈 bug 的邮箱地址,你可以把它换成你自己的邮箱,不过这个示例程序的 bug 还是发到我的邮箱比较好。

  • AM_INIT_AUTOMAKE

    这个宏告诉 Autoconf 我们将使用 Automake 工具(是的,我们是可以只用部分 Autotools 工具的)。这个宏也负责对 Automake 进行初始化配置。-WallforeignAutomake 的选项,它们并不是分开的两个参数,所有的选项应当用空格分隔,然后包含到一个方括号中。

    -Wall 表示 Automake 工具将要求编译器输出编译过程中遇到的所有警告,这与很多 C 编译器的 -Wall 参数相似。foreign 表示 Automake 不遵循 GNU 标准构建工程,所以它会忽略诸如缺少 README 文件之类的问题。如果你要构建一个正式的应用,以可能需要移除这个选项,然后添加一些便于用户了解应用的文件。

    译者注:移除 foreign 表示我们须按照 GNU 标准生成一些文件,主要包括项目根目录下的 NEWSAUTHORREADMEChangeLog,可以用 touch NEWS AUTHOR README ChangeLog 命令来完成。

  • AC_CONFIG_FILES

    在这个宏中我们列出执行配置工程(configure)操作后需要输出的文件。假如我们在列表中添加了名为 plerp 的文件,那么 Autoconf 就会去查找名为 plerp.in 的文件,然后将它转换成 plerp。这项工作实质上是将 plerp.in 中所有 @VARIABLE@ 位置替换成变量 VARIABLE 的内容。到目前为止,我们还未亲自设定任何变量,不过已经有了一些由 AutoconfAutomake 内部定义的变量。

    我们在这个宏中告诉 Autoconf 需要将 Makefile.in 转换成 Makefile,那么 Makefile.in 又在哪里呢?答案是当我们运行 Automake 时,它将把 Automake.am 转换成 Automake.in。我们将在下一步完成这个工作。

  • AC_OUTPUT

    这个宏用于使 Autoconf 生成上述所有文件。

我们现在需要“引导(bootstrap)”程序(即将项目从混沌状态初始化至编译系统可工作的状态)。Autoreconf 程序会帮我们完成这项工作,它会运行包括 AutoconfAutomake 在内的诸多程序,为项目配置好编译环境。在终端中输入:

autoreconf -i
configure.ac:2: installing `./install.sh'
configure.ac:2: installing `./missing'

终端中会打印出被创建的文件的信息(这项安装工作是由 -i 选项完成的,如果这些文件已经被创建,那么我们只需输入 autoreconf 即可)。不过,当我们浏览目录时会发现,新增的文件不仅仅是终端提到的几个,Makefile.inaclocal.m4configure 以及一个 autom4te.cache 都会在执行命令时被创建。

关于引导

其实,如果有人想从这里开始自行编译你的程序,他/她已经用不到 Autoconf 或者 Automake 了 —— shellMake 足矣。一个可供分发的源码包通常都配备了编译过程所需的各种文件,你不需要再被 Autotools 搞得痛不欲生。但如果项目源代码是从仓库中获取的,它就有可能还未被引导,这是因为维护者通常假定我们这些屌炸天的开发者们为了应对五花八门的开发环境已经在自己的电脑上安装了众多的编译工具。如果你下载的源代码符合这种情况,可以尝试用 autoreconf -i 自行引导。有时候项目会提供一个名为 autogen.shbootstrap 的文件帮助我们完成这项工作 —— 尤其是引导过程中需要完成一些额外工作时。如果存在这些文件,直接运行它就好了。

现在编译系统已经初始化完毕,我们可以开始常规的编译过程:

./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
configure: creating ./config.status
config.status: creating Makefile
make
make: Nothing to be done for `all'.

当然 make 目前无事可做。我们没有代码文件,Makefile.am 也是空的。不过,如果你查看生成的 Makefile 文件,它却并非一无所有:我的系统报告它有 14 KB。虽然我们的项目还未正式开始,我们已经有了一个灵活的编译系统。

为了展示系统的灵活性,我们输入 make dist,当前目录就会出现一个名为 app-skeleton-1.tar.gz 的文件。这是个源代码的 tarball 归档文件,可用于分发。即使用户的设备中没有 Autotools 也可以下载这个包进行编译,因为他们需要的是 configureMakefile 文件,这些已经预先打包了。

我们还可以做些别的事情,比如清理项目的目录。如果想查阅全部 make target 指令的话,可以去看看 Make manual


文章许可协议:Attribution-NonCommercial-ShareAlike 3.0 Unported

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容