准备
获取FB源代码
要编译新版本的FB,您首先需要
获取FB源代码.以下假设您有一个名为
fbc的目录,其中包含最新的FB源代码。
安装MinGW-w64工具链
在本指南中,我们将使用32位或64位
MinGW-w64工具链分别构建32位或64位版本的FB。请访问http://sourceforge.net/projects/mingw-w64/files/,并输入
针对Win64的工具链或
针对Win32的工具链目录,具体取决于是否要编译32位或64位版本的FB。输入
Personal Builds/mingw-builds/子目录,选择最新的gcc版本,然后输入
threads-win32/sjlj/子目录并从那里下载工具链软件包。
将工具链解压缩成新的
C:\MinGW-w64目录,最终得到
C:\MinGW-w64\bin\gcc.exe.
如果您知道您在做什么,还可以使用不同的MinGW-w64工具链,甚至可以使用MinGW.org或TDM-GCC等不同项目。有关DevGccToolchainChoice页面上MinGW工具链选项的更多信息。
安装MSYS
MSYS(原来是Cygwin的分支)将一个类Unix的shell环境带到Windows中,包括GNU make,bash shell和Unix命令行工具,如
cp和
rm.对于FB,我们需要它来运行FB makefile和FB测试套件。
可以使用最新版本的
从MinGW.org项目中获取设置下载并提取所需的MSYS软件包。
运行安装程序并选择
C:\MinGW作为安装目录。这样,它将与
C:\MinGW-w64分开,避免潜在的冲突。MinGW安装管理器(
C:\MinGW\bin\mingw-get.exe)应该自动打开。使用它从“基本设置”部分安装
mingw-developer-toolkit程序包,方法是单击包名称旁边的框,然后选择“标记为安装”,然后从应用程序菜单中选择安装 - >应用更改。
这应该安装常用的MSYS组件。我们不想在这里安装
mingw32-base或
mingw32-gcc-*软件包,因为我们使用的是外部的MinGW-w64工具链而不是MinGW.org。如果您不希望使用MinGW.org安装程序,还可以从
MinGW项目的下载站点手动下载MinGW / MSYS软件包。
最终,MSYS应该安装在
C:\MinGW\msys\1.0\.现在有三个重要的目录:
C:\MinGW-w64\bin\,
C:\MinGW\bin\和
C:\MinGW\msys\1.0\bin\.所有这些都必须添加到
PATH环境变量中(按给定的顺序),以便在从命令提示符或FB makefile中调用它们时包含的程序。
为了避免修改系统范围的
PATH,您可以使用下面的
open-msys.bat脚本,每次需要时,使用所需的
PATH设置打开一个MSYS bash:
set PATH=C:\MinGW\msys\1.0\bin;%PATH%
set PATH=C:\MinGW\bin;%PATH%
set PATH=C:\MinGW-w64\bin;%PATH%
C:\MinGW\msys\1.0\msys.bat
获得libffi
FB rtlib源代码取决于gcc工具链中可用的
libffi标头(
ffi.h和
ffitarget.h)包含目录(
C:\MinGW-w64\i686-w64-mingw32\include,用于32位MinGW-w64和
C:\MinGW-w64\x86_64-w64-mingw32\include,用于64位MinGW-w64)。此外,在编译使用
Threadcall的FB程序时,稍后将需要
libffi.a库。
预设版本的libffi可从
fbc下载区获取。
如果您不想使用预构建版本,但是更愿意手动编译libffi,那么它是相当简单的。libffi使用autotools(autoconf,automake,libtool)构建系统,因此必须为MinGW / MSYS安装相应的包。打开MSYS bash(使用正确的PATH设置)。
- 64位:这需要在MSYS'uname周围工作,即使在64位上仍然返回32位:
$ ./configure --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32
$ make
这应该在
include/子目录中生成libffi标头,并在
.libs/子目录中生成编译库。然后,您可以将它们复制到MinGW-w64工具链的相应目录中,以便gcc可以找到它们。
独立构建(自包含FB)
获取现有的FB设置进行自举
我们需要一个工作的FB-win32安装来引导新的FB编译器。如果您还没有安装FB-win32,请从
FB的下载网站下载最新的
FreeBASIC-X.XX.X-win32版本。它应该在
C:\FreeBASIC-X.XX.X-win32之外提取。
构建新的FB设置
如果要创建一个
传统独立FB-win32安装程序,就像
FreeBASIC-X.XX.X-win32发行版中一样,您需要通过设置ENABLE_STANDALONE变量来告诉FB的makefile。此外,为了编译64位,需要手动设置
TARGET_ARCH变量,因为MSYS的
uname -m命令不支持64位,因此FB makefile会将系统错误地检测为32位。假设FB源位于
C:\fbc,请创建一个包含以下内容的
C:\fbc\config.mk文件:
ENABLE_STANDALONE = 1
# Manually set TARGET_ARCH to override uname check for 64bit
TARGET_ARCH = x86_64
然后,使用上述.bat脚本打开MSYS bash(使用正确的PATH设置),使用FB源代码进入目录,运行“make”,将
FBC=...变量设置为到现有的fbc.exe用于引导,并让它编译:
$ cd /c/fbc
$ make FBC=C:/FreeBASIC-X.XX.X-win32/fbc.exe
这应该分别在
lib\win32\或
lib\win64\中生成了
fbc.exe编译器和库。要完成这个新的FB设置,您需要将binutils(as.exe,ar.exe,ld.exe,dlltool.exe)添加到
bin\win32\并将其部分MinGW库复制到
lib\win32\中。
- 复制到C:\fbc\bin\win32(32bit)或C:\fbc\bin\win64(64bit):
- C:\MinGW-w64\bin\{ar,as,ld,dlltool}.exe
- 来自http://www.godevtool.com/ GoRC.exe
- 复制到C:\fbc\lib\win32(32bit)或C:\fbc\lib\win64(64bit):
- C:\MinGW-w64\[target]\lib\{crt2,dllcrt2,gcrt2}.o
- C:\MinGW-w64\[target]\lib\lib{gmon,mingw32,mingwex,moldname}.a
- C:\MinGW-w64\[target]\lib\lib{advapi32,gdi32,kernel32,msvcrt,user32,winmm,winspool}.a (rename to lib*.dll.a if wanted)
- C:\MinGW-w64\lib\gcc\[target]\[version]\{crtbegin,crtend}.o
- C:\MinGW-w64\lib\gcc\[target]\[version]\libgcc.a
- libffi.a(从预构建的libffi包或您自己的构建)
([target])对于64位MinGW-w64的32位MinGW-w64或x86_64-w64-mingw32是i686-w64-mingw32,[version]是gcc版本号)
如果需要,您可以复制更多的库,例如
C:\MinGW-w64\lib\gcc\[target]\[version]\libsupc++.aC ++支持库或来自
C:\MinGW-w64\[target]\lib\目录的其他Win32 API DLL导入库。
现在,新的FB设置应该可以使用了。您可以从源代码树中使用它,或将其复制到别的地方。以下是相关的文件和目录:
- fbc.exe
- bin/win32/(32bit)或bin/win64/(64bit)
- inc/
- lib/win32/(32位)或lib/win64/(64位)
正常构建(如Linux)
获取现有的FB设置进行自举
我们需要一个工作的fbc安装来引导新的FB编译器。如果您尚未安装fbc,请从
FB的下载网站下载最新的fbc-X.XX.X-mingw-w64-i686(32位)或fbc-X.XX.X-mingw-w64-x86_64(64位) ,并将其提取到MinGW-w64目录(
C:\MinGW-w64),如MinGW包。这将为您的MinGW-w64安装添加一个工作的fbc。
构建新的FB设置
为了创建正常(非独立)构建,只需编译FB,而不指定
ENABLE_STANDALONE.但是,为了编译64位,需要手动设置
TARGET_ARCH变量,因为MSYS的
uname -m命令不支持64位,因此FB makefile会将系统错误地检测为32位。
- 32bit:否config.mk需要。
- 64bit:创建一个包含以下内容的config.mk
# Manually set TARGET_ARCH to override uname check for 64bit
TARGET_ARCH = x86_64
然后,使用上述.bat脚本打开MSYS bash(使用正确的PATH设置),使用FB源代码进入目录,运行“make”并编译它:
$ cd /c/fbc
$ make
这应该分别在
lib\freebasic\win32\或
lib\freebasic\win64\中生成了
bin/fbc.exe编译器和库。
或者,您可以通过运行“make install”将此设置复制到
C:\MinGW-w64树中:
$ make install prefix=C:/MinGW-w64
将前缀变量存储在
config.mk中是非常有用的,因此您将来可以运行
make install,而无需担心:
# config.mk:
prefix = C:/MinGW-w64
以这种方式将fbc安装到MinGW树中意味着它的作用就像是MinGW的一部分。但是,也可以从源代码树中使用fbc,而不必在其他地方安装它。它将调用
gcc -print-file-name=...以找到MinGW binutils和库。