ebuild 脚本又怎样知道要使用哪个 user_compile() 函数呢?实际上,这很简单。ebuild 脚本中,在执行 e2fsprogs-1.18.ebuild 文档之前定义缺省 user_compile() 函数。假如在 e2fsprogs-1.18.ebuild 中有一个 user_compile(),则他覆盖前面定义的缺省版本。假如没有,则使用缺省 user_compile() 函数。
这是好工具,我们已添加了很多灵活性,而无需任何复杂代码(假如无需的话)。在这里就不讲了,但是,还应该对 ebuild_unpack() 做类似修改,以便用户能够覆盖缺省解包过程。假如要做任何修补,或文档包含在多个档案中,则这很方便。更有个好主意是修改解包代码,以便他能够缺省识别由 bzip2 压缩的 tar 压缩包。
配置文档
现在为止,已讲了很多不方便的 bash 技术,现在再讲一个。通常,假如程式在 /etc 中有一个配置文档是很方便的。幸运的是,用 bash 做到这点很容易。只需创建以下文档,然后并其存为 /etc/ebuild.conf 即可:
|
在该例中,只包括了一个配置选项,但是,您能够包括更多。bash 的一个妙处是:通过执行该文档,就能够对他进行语法分析。在大多数解释型语言中,都能够使用这个设计窍门。执行 /etc/ebuild.conf 之后,在 ebuild 脚本中定义 "$MAKEOPTS"。将利用他允许用户向 make 传递选项。通常,将使用该选项来允许用户告诉 ebuild 执行 并行 make。
什么是并行 make?
为了提高多处理器系统的编译速度,make 支持并行编译程式。这意味着,make 同时编译用户指定数目的源文档(以便使用多处理器系统中的额外处理器),而不是一次只编译一个源文档。通过向 make 传递 -j # 选项来启用并行 make,如下所示:
|
这行代码指示 make 同时编译四个程式。 MAKE="make -j4" 自变量告诉 make,向其启动的任何子 make 进程传递 -j4 选项。
这里是 ebuild 程式的最终版本:
ebuild,最终版本 |
请注意,在文档的开始部分执行 /etc/ebuild.conf。另外,还要注意,在缺省 user_compile() 函数中使用 "$MAKEOPTS"。您可能在想,这管用吗 - 毕竟,在执行实际上事先定义 "$MAKEOPTS" 的 /etc/ebuild.conf 之前,我们引用了 "$MAKEOPTS"。对我们来说幸运的是,这没有问题,因为变量扩展只在执行 user_compile() 时才发生。在执行 user_compile() 时,已执行了 /etc/ebuild.conf,并且 "$MAKEOPTS" 也被配置成正确的值。
结束语
本文已讲述了很多 bash 编程技术,但是,只触及到 bash 能力的一些皮毛。例如,Gentoo Linux ebuild 产品不但自动解包和编译每个包,还能够:
- 假如在 "$DISTDIR" 没找到源代码,则自动下载
- 通过使用 MD5 消息摘要,验证源代码没有受到破坏
- 假如请求,则将编译过的应用程式安装到正在使用的文档系统,并记录任何安装的文档,以便日后能够方便地将包卸载。
- 假如请求,则将编译过的应用程式打包成 tar 压缩包(以您希望的形式压缩),以便以后能够在另一台电脑上,或在基于 CD 的安装过程中(假如在构建发行版 CD)安装。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



