鹦鹉虚拟机/构建鹦鹉
最新的鹦鹉开发版可以从CPAN下载。
鹦鹉的开发由位于http://svn.parrot.org/parrot/的 SVN 仓库控制。可以通过svn checkout
从https://svn.parrot.org/parrot/trunk/获取鹦鹉的最新版本。
由于鹦鹉仍在积极开发中,此页面可能已过时。关于鹦鹉构建过程的最新信息可以在http://www.parrotcode.org/source.html找到。 |
鹦鹉目前以源代码下载的形式提供,尽管有些人试图维护预编译版本以供下载。这些版本通常适用于 Windows、Cygwin、Debian 和 Red Hat。将来可能会添加其他二进制发行版。安装预编译的鹦鹉二进制发行版的说明因特定平台和打包方法而异。有关您下载的任何发行版的更多详细信息,请咨询随附的文档。此页面将不会讨论这些特定发行版,只讨论从原始源代码构建鹦鹉的方法。
nmake
代替make
。目前鹦鹉构建过程需要使用make
、一个可用的 C 编译器和一个可用的 Perl 5 安装。Perl 版本应为 5.8 或更高版本。没有这些东西,你就无法构建鹦鹉。在各种系统上对这些工具的各种组合执行自动测试,任何特定版本都应该能够正确编译。如果您在系统上编译鹦鹉时遇到问题,请向 Parrot Porters 邮件列表发送一封包含问题详情的邮件,鹦鹉开发人员之一会尽力帮助您解决。
Configure.pl
的第一个字母是大写的。在区分大小写的 Unix 和 Linux 系统上,这是一个重要的区别。构建鹦鹉的第一步是运行Configure.pl
脚本,它将在您的系统上执行一些基本测试并生成一个 makefile。要自动使用最常见的选项调用Configure.pl
,请运行程序Makefile.pl
。配置过程会在您的系统上执行许多测试,以确定一些重要的参数。这些测试在某些系统上可能需要几分钟,请耐心等待。此外,配置会为您的系统创建一些平台特定的代码文件。如果没有这些生成的代码文件,构建过程将无法继续。
鹦鹉根据您系统设置使用本地默认值。因此,鹦鹉可能使用与其他计算机上不同的 INTVAL 大小等值。这种使用本地默认值的行为意味着,由您的鹦鹉版本(或由其他人用相同平台构建的版本)编译成字节码的程序将比在其他平台上编写的程序运行得更快。在后面的章节中,我们将更多地讨论这种翻译过程。 |
Configure.pl
执行完毕后,您应该会得到一个名为Makefile
的文件(没有后缀)。从 shell 中进入鹦鹉目录,输入命令 "make
" 或 "nmake
"(Windows 上)。这将启动构建鹦鹉的过程。鹦鹉构建过程可能需要几分钟,因为要执行许多步骤。我们将在后面的章节中讨论其中一些步骤。
鹦鹉的根目录包含一个名为 MANIFEST 的文件。MANIFEST 包含鹦鹉仓库中所有必要文件的列表。如果您向鹦鹉源代码树中添加了一个新文件,请确保将该文件添加到 MANIFEST 中。Configure.pl 会检查 MANIFEST 以确保所有文件都存在,然后再尝试构建。
根据您想要执行的任务或使用鹦鹉的方式,可以为 Configure.pl 指定许多选项。这些选项可能会改变几个生成文件的组成,包括 Makefile。这里,我们将列出其中一些选项。
--help | 显示帮助消息 |
--version | 打印有关 Configure.pl 的版本信息 |
--verbose | 向控制台打印额外信息 |
--fatal | 如果任何步骤失败,立即杀死 Configure,不要运行其他测试 |
--silent | 不向控制台输出任何信息 |
--nomanicheck | 不检查 MANIFEST 文件以确保所有文件都存在。 |
--languages | 指定一个用逗号分隔的语言列表,以便在构建鹦鹉后构建这些语言。 |
--ask | 向用户询问常见问题答案,而不是运行探测。 |
--test | 首先测试配置工具,然后测试 Configure,最后测试构建工具。使用 --test=configure 测试配置工具,然后运行 Configure.pl。使用 --test=build 运行 Configure.pl,然后也测试构建工具。 |
--debugging | 设置 --debugging=0 关闭调试。默认情况下启用调试。 |
--inline | 指定您的 C 编译器是否支持使用 C inline 关键字的内联代码。 |
--optimize | 使用编译器优化和一些其他加速技巧编译鹦鹉。可以创建一个速度更快的鹦鹉,但也可能会暴露更多错误和故障。使用 --optimize=(flags) 指定要使用的编译器优化标志。 |
--parrot_is_shared | 将鹦鹉动态链接到 libparrot,而不是静态链接。 |
--m=32 | 在 64 位平台上,编译 32 位鹦鹉。 |
--profile | 打开分析。目前只适用于 GCC 编译器。 |
--cage | 打开其他警告,用于 Cage Cleaners。 |
--cc | 指定要使用的编译器。例如,使用 --cc=gcc 表示 GCC 编译器,使用 --cc=cl 表示 Microsoft 的 C++ 编译器。使用 --ccflags 指定任何其他编译器标志,使用 --ccwarn 打开任何其他警告。以下是一些其他选项
|
--intval --floatval --opcode | 设置要使用的每个值的 C 数据类型。请注意,--intval 和 --opcode 必须相同,否则可能会出现奇怪的错误。 |
--ops | 指定要构建的任何可选 OPS 文件。 |
--pmc | 指定要构建的任何可选 PMC 文件。 |
--without-gmp | 不要使用 |
--without gdbm | 在没有 GMP 的情况下构建鹦鹉 |
--without-opengl | 在没有 OpenGL 支持的情况下构建鹦鹉 |
--without-crypto | 在没有加密库的情况下构建鹦鹉 |
--icu-config | 指定系统上 Unicode ICU 库的位置。 |
--without-icu | 在没有 ICU 和 Unicode 支持的情况下构建鹦鹉。 |
--maintainer | 使用 Lex 和 Yacc(或等效工具)编译 IMCC 的词法分析器和语法分析器。使用 --lex 指定词法分析器的名称,使用 --yacc 指定语法分析器的名称。 |
--miniparrot | 构建 miniparrot |
--prefix | 指定一个路径前缀 |
--exec-prefix | 指定一个执行路径前缀 |
--bindir | 系统上二进制可执行文件所在的目录 |
--sbindir | 系统管理员可执行文件文件夹 |
--libexecdir | 程序可执行文件文件夹 |
--datadir | 用于机器无关数据的只读数据目录。 |
--sysconfdir | 用于机器相关的只读数据 |
--sharedstatedir | 可修改的体系结构无关数据目录 |
--localstatedir | 可修改的体系结构相关数据目录 |
--libdir | 目标代码目录 |
--includedir | 编译器包含文件所在的文件夹 |
--oldincludedir | 用于旧版本的 GCC 的 C 头文件目录 |
--infodir | info 文档目录 |
--mandir | 手册页文档文件夹 |
构建过程完成后,您应该拥有一个 Parrot 可执行文件(以及其他文件)。在 Windows 系统上,该文件名为 parrot.exe
。在其他系统上,文件名可能略有不同,例如没有后缀。
本书将简单地使用“parrot”作为调用 Parrot 的命令。这在您的系统上可能有所不同。 |
还创建了另外两个有趣的程序,miniparrot.exe
和 libparrot.dll
。如果您不在 Windows 系统上,这些文件将具有不同的名称。
对于不熟悉 make
程序的读者来说,它是一个可以用来自动确定如何从源代码文件构建软件项目的程序。在 Makefile 中,您指定依赖项列表以及从其他文件生成一个文件的 方法。make
然后确定构建项目的顺序和方法。
make
有目标,这意味着一个 Makefile 可以有多个目标。对于 Parrot,已经定义了多个目标,可以帮助构建、调试和测试。以下是部分构建目标列表:
命令 | 解释 |
---|---|
make |
从源代码构建 Parrot。仅重新构建上次构建后更改的组件。 |
make clean |
删除构建过程遗留的所有中间文件。清理目录树,以便可以完全重建 Parrot。 |
make realclean |
完全删除所有临时文件、所有中间文件和所有 Makefile。在运行 make realclean 命令后,您需要再次运行 Configure.pl 。 |
make test |
构建 Parrot(如果需要)并在其上运行测试套件。如果测试结果中存在错误,您可以尝试自行修复,或者向 Parrot 开发者提交错误报告。这将受到赞赏。 |
make fulltest |
构建 Parrot(如果需要)并在每个运行内核上运行测试套件。这可能是一个非常耗时的操作,通常只在发布新版本之前执行。 |
make smoke |
执行冒烟测试。这将运行 Parrot 测试套件并尝试将测试结果直接传输到 Parrot 开发服务器。冒烟测试结果可以帮助开发人员跟踪 Parrot 在哪些系统上可以正确构建。 |
如上所述,冒烟测试是向我们提交有关您系统上 Parrot 信息的简便方法。由于 Parrot 应该支持许多不同的计算机体系结构和操作系统,因此很难知道 Parrot 在所有系统上的运行情况。
除了冒烟测试,您还可以通过多种方式向 Parrot 提交错误报告。如果您是一名熟练的程序员,您可能也有兴趣尝试修复错误并提交补丁。