Compiling FB for DOS
 

FB的DOS版本通常在安装了DJGPP和DOS版本的FB的32位Windows系统上编译。

准备

获取FB源代码

要编译新版本的FB,您首先需要获取FB源代码.以下假设您有一个名为fbcdos的目录,其中包含最新的FB源代码。命名它fbcdos很方便,因为它避免了冲突,以防您也有一个fbc目录用于构建Windows版本的FB。

安装DJGPP

要安装DJGPP,我们需要下载几个可以在DJGPP主页找到的软件包。FB需要beta/v2/目录中的djdev204.zip,以及beta/v2gnu/目录中的其他几个。如果有任何东西丢失,您还可以查看current/v2gnu/目录。需要以下软件包:

  • binutils (bnu*b.zip)
  • bash (bsh*.zip)
  • djdev (djdev*.zip) - pick up djdev204.zip or later from the beta/ directory
  • fileutils (fil*.zip)
  • gcc (gcc*b.zip)
  • g++ (gpp*b.zip)
  • make (mak*b.zip)
  • shellutils (shl*b.zip)
  • textutils (txt*b.zip)

通过将所有内容提取到C:\DJGPP并添加名为“DJGPP”的环境变量,设置为C:\DJGPP\djgpp.env,设置DJGPP。

它可以是有用的(特别是与MinGW并行工作)使用批处理脚本在其PATH环境变量中使用DJGPP工具启动终端,而不是修改系统的全局PATH环境变量:

set DJGPP=C:\DJGPP\djgpp.env
set PATH=C:\DJGPP\bin;%PATH%
cd C:\
cmd

最后,您应该能够在其PATH中使用C:\DJGPP\bin打开命??令提示符,以便运行gcc命令运行DJGPP的gcc(而不是MinGW的gcc)。

独立构建(自包含FB)

获取现有的FB设置进行自举

我们需要一个工作的FB-dos安装来引导新的FB编译器。如果您尚未安装FB-dos,请从FB的下载网站下载最新的FreeBASIC-X.XX.X-dos版本。它应该在C:\FreeBASIC-X.XX.X-dos之外提取。

构建新的FB设置

如果要创建传统独立FB-dos设置,如FreeBASIC-X.XX.X-dos发行版中的那样,您需要通过设置ENABLE_STANDALONE变量来告知FB的makefile。假设FB源位于C:\fbcdos,请创建一个包含以下内容的C:\fbcdos\config.mk文件:

ENABLE_STANDALONE = 1

然后,在其PATH中打开一个带有C:\DJGPP\bin的命令提示符,使用FB源代码进入目录,运行“make”,将FBC=...变量设置为指向现有的fbc.exe用于引导,并让它编译:

> cd C:\fbcdos
> make FBC=C:/FreeBASIC-X.XX.X-dos/fbc.exe

这应该在lib\dos\中生成了fbc.exe编译器和库。要完成这个新的FB设置,您需要将binutils(as.exe,ar.exe,ld.exe)添加到bin\dos\中,并在一些DJGPP库中复制到lib\dos\.

  • 将这些文件复制到C:\fbcdos\bin\dos
    • C:\DJGPP\bin\{ar,as,ld}.exe
  • 将这些文件复制到C:\fbcdos\lib\dos
    • C:\DJGPP\lib\{crt0,gcrt0}.o
    • C:\DJGPP\lib\lib{emu,m}.a
    • C:\DJGPP\lib\gcc\djgpp\[version]\libgcc.a

如果需要,您可以复制更多的库,例如C:\DJGPP\lib\gcc\djgpp\[version]\libsupcxx.aC ++支持库,或者来自C:\DJGPP\lib\目录的其他库。

关于libc.a的注意事项:FB需要修改版本的DJGPP的libc.a,因为DJGPP的libc.a包含一个错误(有关详细信息,请参阅fbc源代码中的contrib/djgpp/readme.txt)。FB makefile应该照顾它,并在lib\dos\libc.a生成libc.a的修改版本。这不应该被DJGPP的原始libc.a覆盖。

现在,新的FB设置应该可以使用了。您可以从源代码树中使用它,或将其复制到别的地方。以下是相关的文件和目录:

  • fbc.exe
  • bin/dos/
  • inc/
  • lib/dos/

如果将来重建它(例如,在从Git更新FB源代码之后),您可以通过运行“make”,而不指定外部FBC来重建本身。然后,它将使用默认的FBC=fbc,这在这种情况下对应于同一目录中的fbc.exe。

> cd C:\fbcdos
> make

正常构建(如Linux)

获取现有的FB设置进行自举

我们需要一个工作的fbc安装来引导新的FB编译器。如果您尚未安装fbc,请从FB的下载网站下载最新的fbcXXXXb软件包,并将其解压缩到DJGPP目录(C:\DJGPP),如DJGPP软件包。这将为您的DJGPP安装添加一个工作的fbc。

构建新的FB设置

为了创建像fbcXXXXb发行版中的正常(非独立)构建,只需编译FB而不指定ENABLE_STANDALONE.在PATH中使用C:\DJGPP\bin打开命令提示符,使用FB源代码进入目录,运行“make”并进行编译。

> cd C:\fbcdos
> make

这应该已经生成了bin/fbc.exe编译器和库lib\freebas\dos\.

或者,您可以通过运行“make install”将此设置复制到C:\DJGPP树中:

> make install prefix=C:/DJGPP

将前缀变量存储在config.mk中是非常有用的,因此您将来可以运行make install,而无需手动重新设置:

# config.mk:
prefix = C:/DJGPP

以这种方式将fbc安装到DJGPP树中意味着它的作用就像是DJGPP的一部分。但是,也可以从源代码树中使用fbc,而不必在其他地方安装它。它将调用gcc -print-file-name=...以找到DJGPP binutils和库。