已做了很多改变,下面来回顾一下。首先,将编译和解包步骤放入各自的函数中,其函数名分别为 ebuild_compile() 和 ebuild_unpack()。这是个好的步骤,因为代码正变得越来越复杂,而新函数提供了一定的模块性,使代码更有条理。在每个函数的第一行,显式 "cd" 到想要的目录,因为,随着代码变得越来越模块化而不是线形化,出现疏忽而在错误的当前工作目录中执行函数的可能性也变大。"cd" 命令显式地使我们处于正确的位置,并防止以后出现错误 - 这是重要的步骤,特别是在函数中删除文档时更是如此。
另外,还在 ebuild_compile() 函数的开始处添加了一个有用的检查。现在,他检查以确保 "$SRCDIR" 存在,假如不存在,则打印一条告诉用户首先解包档案然后退出的错误消息。假如愿意,能够改变这种行为,以便在 "$SRCDIR" 不存在的情况下,ebuild 脚本将自动解包源代码档案。能够用以下代码替换 ebuild_compile() 来做到这点:
ebuild_compile() 上的新代码 |
ebuild 脚本第二版中最明显的改变之一就是代码末尾新的 case 语句。这条 case 语句只是检查第二个命令行自变量,然后根据其值执行正确操作。假如现在输入:
|
就会得到一条错误消息。现在需要告诉 ebuild 做什么,如下所示:
|
或
|
或
|
假如提供上面所列之外的第二个命令行自变量,将得到一条错误消息(* 子句),然后,程式退出。
使代码模块化
既然代码很高级并且实用,您可能很想创建几个更高级的 ebuild 脚本,以解包和编译所喜爱的程式。假如这样做,迟早会碰到一些不使用 autoconf ("./configure") 的源代码,或可能碰到其他使用非标准编译过程的脚本。需要再对 ebuild 系统做一些改变,以适应这些程式。但是在做之前,最好先想一下如何完成。
将 "./configure --prefix=/usr; make" 硬编码到编译阶段的妙处之一是:大多数时候,他能够正确工作。但是,还必须使 ebuild 系统适应那些不使用 autoconf 或正常 make 文档的源代码。要解决这个问题,建议 ebuild 脚本缺省执行以下操作:
- 假如在 "$" 中有一个配置脚本,则按如下执行他:
./configure --prefix=/usr
否则,跳过这步。 - 执行以下命令:
make
既然 ebuild 只在 configure 实际存在时才运行他,现在能够自动地适应那些不使用 autoconf 但有标准 make 文档的程式。但是,在简单的 "make" 对某些源代码无效时该怎么办?需要一些处理这些情况的特定代码来覆盖合理的缺省值。要做到这一点,将把 ebuild_compile() 函数转换成两个函数。第一个函数(可将其当成“父”函数)的名称仍是 ebuild_compile()。但是,将有一个名为 user_compile() 的新函数,该函数只包含合理的缺省操作:
拆成两个函数的 ebuild_compile() |
现在这样做的原因可能还不是很明显,但是,再忍耐一下。虽然这段代码和 ebuild 前一版的工作方式几乎相同,但是现在能够做一些以前无法做的 -- 能够在 sed-3.02.ebuild 中覆盖 user_compile()。因此,假如缺省的 user_compile() 不满足需要,能够在 .ebuild 文档中定义一个新的,使其包含编译包所必需的命令。例如,这里有一个 e2fsprogs-1.18 的 ebuild 文档,他需要一个略有不同的 "./configure" 行:
e2fsprogs-1.18.ebuild |
现在,将完全按照我们希望的方式编译 e2fsprogs。但是,对于大多数包来说,能够省略 .ebuild 文档中的任何定制 user_compile() 函数,而使用缺省的 user_compile() 函数。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



