2.3 编译程序

Loko 可以编译 R6RS 顶层程序:

loko --compile hello.sps

上述命令将编译 R6RS 顶层程序 hello.sps 并创建二进制文件 hello,该二进制文件将在 Linux 和裸金属 上运行。

编译 R7RS 程序:

loko -std=r7rs --compile hello.sps

库从 LOKO_LIBRARY_PATH 环境变量中查找 (该变量由包管理器 Akku 自动设置)。 默认禁用 eval 以加速构建,但可以 使用 -feval 启用:

loko -feval --compile hello.sps

支持的目标平台可以使用 -ftarget=TARGET 更改。默认目标 是 pc+linux。其他目标有 linux(仅 Linux), netbsd(仅 NetBSD)和 pc(仅裸 金属)。

还提供了一个额外奇特的目标。它被称为 polyglot, 创建的二进制文件可以在 Linux、NetBSD 和裸金属上运行。这 比看起来更没用,将来可能会被移除。

你也可以省略常规的 Scheme 库。如果你使用 -ffreestanding,那么只在你的程序所使用的 库之上添加基于汇编的运行时。这主要在 你开发编译器时有用。源代码发行版中有一个 使用此功能的示例,samples/hello/just-hello.sps

你可以调优源代码级优化器(cp0)的参数。 参数 -fcp0-size-limit=N 设置大小限制, -fcp0-effort-limit=N 设置努力限制。

命令行非常不灵活,所以目前请尽量 遵循固定的参数顺序。

Loko 将其运行时集成到生成的二进制文件中,并且 Loko 的源代码需要可用才能成功编译。其 位置在编译 Loko 时由 PREFIX 决定,但可以 使用 LOKO_SOURCE 环境变量覆盖。