使用 make

在使用 make 进行编译时,必须具有上述目录结构,使用 cycle 目标来编译编译器。

正常情况下,重新编译编译器仅限于以下(假设从目录 /pp/src 开始):

cd compiler
make cycle

只有在正确安装 makefile 并且在 PATH 中存在所需工具时,这才有效。必须安装哪些工具可以在附录E中找到。

以上说明将执行以下操作:

  1. 使用当前编译器,RTL 在正确的目录中统,该目录由 OS 确定。如,在 Linux 下,RTL 在目录 rtl/linux 中编译。

  2. 使用新编译的 RTL 编译编译器。如果成功,将新编译的编译器程序文件复制到临时位置。

  3. 使用上一步中的临时位置的程序文件,重新编译 RTL。

  4. 使用临时位置的程序文件和最后一步中新编译的 RTL,再次编译编译器。

最后两步重复3次,直到完成三次传递或直接生成的编译器二进制文件等于它编译的二进制文件。此过程可确保编译器二进制文件准确无误。

编译加一个目录:在为另一个目录编译编译器时,需要指定 makefile 的 OS_TARGET 变量。它可以设置为以下值:win32、go32v2、os2 和 linux。如,选择 win32 目标中 go32v2 做为交叉编译:

cd compiler
make cycle OS_TARGET=go32v2

这将编译 go32v2 RTL,并编译 go32v2 编译器。

在编译新编译器并且编译器应该使用现有的编译 RTL 编译时,必须使用 all 作为编译目标,并且必须指定另一个 RTL 目录而不是默认目录(即 ../rtl/$(OS_TARGET) 目录)。如,假设已编译的 RTL 单元位于 /pp/rtl/units/i386-linux 中,则输入:

cd compiler
make clean
make all UNITDIR=/pp/rtl/units/i386-linux

应该使用 /pp/rtl/units/i386-linux 目录中的 RTL。

然后,这将使用 /pp/rtl/units/i386-linux 中的 RTL 单元编译编译器。完成操作后,可以使用 make cycle,至此编译器开始:

make cycle PP=./ppc386

上面的将执行 make cycle,并使用 make all 生成的编译器开始。

在所有情况下,不同选项可以传递给 make 后会影响编译过程。通过 makefile 会向命令行添加任何所需的编译器选项,以便可以编译 RTL 和编译器。可以通过 OPT(如,优化选项)来指定选项。

生成 makefile 所需的外部程序

本文译自:https://freepascal.org/docs-html/current/prog/progse82.html

生成 makefile 至少需要以下程序才能正确运行:

程序名

说明

cp

复制程序。

date

显示日期的程序。

install

安装文件的程序。

make

显然,make 程序。

pwd

显示当前工作目录的程序。

rm

删除文件程序。

zip

zip 存储程序(仅适用于 Dos / Windows / OS/2 系统)。

tar

tar 归档程序(仅限 Unix 系统)。

这些是 Linux 上的标准程序,可能除了 make 外,对于 DOS、Windows NT 或 OS/2、eComStation,它们作为 Free Pascal 的一部分发布。

如果你使用某些特殊目标,则可以选择以下程序,所需的设置由工具部分设置控制。

程序名

说明

cmp

DOS 和 Windows NT 的 文件对比工具。

diff

文件对比工具。

ppdep

依赖列表器,随 Free Pascal 一起发布。

ppumove

Free Pascal 单元迁移工具。

upx

UPX 可执行文件压缩程序。

所以这些,可以在 Free Pascal FTP 站点 1 中找到。ppdep 和 ppumove 随 Free Pascal 编译器一起发布。

1

Windows 下可执行文件在 ftp://ftp.freepascal.org/pub/fpc/contrib/utils/