美文网首页
[译文] 如何开始一个真正的 GTK 项目(第二部分:配置 Au

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

作者: Leavers | 来源:发表于2016-09-10 14:53 被阅读0次

    原文地址: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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/yvvyettx.html