FB makefile以及编译器/ rtlib / gfxlib2源代码提供了一些配置选项。如果使用FB makefile构建FB,则使用FB makefile的配置选项是有意义的。如果您通过手动编译源(不使用FB makefile)来构建FB,那么当然您只能使用源代码配置选项,并且您有责任自己将FB设置放在一起。
编译器和rtlib / gfxlib2源代码都处理一些允许一些配置的#define。例如,在构建编译器时(通过在fbc命令行上指定
-d ENABLE_STANDALONE)#defining ENABLE_STANDALONE将调整编译器
独立设置.另一个例子,在构建rtlib时(通过在gcc命令行中指定
-DDISABLE_FFI)#defining DISABLE_FFI将导致不使用libffi头(
ffi.h)构建rtlib。这将禁用rtlib中的
Threadcall支持,但如果您没有libffi,则可以使用它。
使用FB makefile时,可以在make命令行或
config.mk内部设置一些影响makefile调用fbc / gcc编译器以及FB设置使用的目录布局的变量。这包括makefile将自动将配置选项传递给编译器/ rtlib / gfxlib2源代码的情况。例如,当FB makefile指定ENABLE_STANDALONE = 1时,它会在构建新编译器(使其独立)时使用
-d ENABLE_STANDALONE,并将新建的编译器和库放入独立的目录布局中。
FB makefile命令
仅用于构建特定组件。例如,这可以用于构建特定目标的rtlib,以便能够交叉编译该目标的FB程序(例如compiler)。
用于删除内置文件。make clean删除所有内置文件,例如make clean-compiler仅删除为编译器构建的文件,从而可以更快地重新编译编译器,而无需重新构建整个rtlib / gfxlib2代码。
- install[-component], uninstall[-component]
用于将构建的文件复制到由prefix变量指定的目录中,或从中删除它们。这对于在Linux / BSD系统上的/usr/local安装正常版本是最有用的。对于独立版本,make install也可以工作并复制或删除文件。但是,独立构建使用不兼容的目录布局,因此不应该安装到/usr/local或类似的目录中。
请注意,从编译目录直接运行新建的FB设置是很好的; make install不需要使其工作(除非prefix路径通过ENABLE_PREFIX硬编码到编译器中)。
另外还有install-includes和uninstall-includes命令,它们只复制/删除FB包含(头文件)。请注意,没有make includes或类似的命令,因为不需要构建包含。
FB makefile配置
以下变量旨在在makefile文件中读入的FB makefile旁边的make命令行或名为
config.mk的文件中进行设置。
config.mk用于永久性设置变量,以便您在调用make时不必手动指定它们。
制作命令行示例:
$ make CFLAGS='-O2 -g'
config.mk示例:
CFLAGS = -O2 -g
- FBFLAGS, FBCFLAGS, FBLFLAGS
在编译和/或链接编译器时要使用的额外fbc标志。默认值为-maxerr 1(查看FB makefile了解更多详细信息)。通常,这用于添加诸如-g -exx之类的选项来构建调试版本的编译器。
编译rtlib和gfxlib2时要使用的额外的gcc标志。默认值为-O2(查看FB makefile了解更多详细信息)。通常,通过执行CFLAGS=-g来进行调试。
FB安装路径。默认值为/usr/local.注意:MSYS将/usr/local映射到C:\msys\1.0\local.
这仅用于...
- 通过makefile的install和uninstall命令,
- 在编译器(硬编码)中,如果使用了ENABLE_PREFIX
请注意,结合Win32上的bash(例如从DJGPP或MSYS),必须使用正斜杠而不是目录路径中的反斜杠,例如:prefix=C:/MinGW
该变量可以设置为gcc工具链三元组,例如
i686-pc-linux-gnu或
x86_64-w64-mingw32,以便使用该GCC交叉编译器工具链进行交叉编译。makefile将使用
fbc -target $(TARGET)而不是
fbc,而
$(TARGET)-gcc而不是
gcc.
例如,在安装了
i686-w64-mingw32GCC交叉编译器的Debian GNU / Linux系统上,您可以像这样构建win32 rtlib:
# Build the win32 rtlib/gfxlib2
make rtlib gfxlib2 TARGET=i686-w64-mingw32
# Install it into /usr/local/lib/i686-w64-mingw32-freebasic
make install-rtlib install-gfxlib2 TARGET=i686-w64-mingw32
它将补充
/usr/local中现有的fbc安装,就像一个插件,从现在开始,您可以通过执行以下操作来交叉编译FB程序:
fbc -target i686-w64-mingw32 ...
这些变量指定构建过程中使用的fbc,gcc和ar程序。您可以指定它们来覆盖默认值,例如:
- make FBC=~/FreeBASIC-0.90.1-linux/fbc CC="gcc -m32"
FBC仅影响compiler源代码,rtlib和AR用于rtlib和gfxlib2.
V详细。默认情况下,makefile不会显示编译过程中使用的完整命令行,而是打印出最新的工具和文件名组合,以便更好地显示构建进度。它也使得警告和错误在控制台窗口中脱颖而出。如果设置变量V,则回显技巧被禁用,并且完整的命令行将被显示,如GNU通常所示。
构建独立的FB设置,而不是正常的Unix风格的设置,另请参见:
独立与正常比较.这使得makefile在构建编译器时使用独立的目录布局并使用
-d ENABLE_STANDALONE.
这导致makefile在构建编译器时使用-d ENABLE_PREFIX=$(prefix).
这导致makefile在构建编译器时使用-d ENABLE_SUFFIX=$(ENABLE_SUFFIX),并将给定的后缀字符串附加到fbc可执行文件和lib/目录的名称。
例如,使用ENABLE_PREFIX=-0.24将为您提供bin/fbc-0.24.exe和lib/freebasic-0.24/目录,而不是默认的bin/fbc.exe和lib/freebasic/.这样可以并行安装多个版本的编译器和运行时。
注意:include/freebasic/目录名称不受影响,FB头总是由所有已安装的FB版本共享(FB的头文件及其目录布局设计为能够这样做)。
这仅适用于正常(非独立)构建。独立构建不需要,因为所有这些都可以在单独的安装目录中,而正常(非独立)构建可能需要共享一个常见的安装目录,例如/usr/local或C:\MinGW.
编译器源代码配置(FBFLAGS)
这使得编译器作为独立的工具,不能依赖于系统来具有某些程序或库。有关详细信息,请参阅
正常独立比较.
这使得编译器在搜索自己的lib/freebasic/目录时将给定的后缀附加到lib/freebasic/目录名称。例如,-d ENABLE_SUFFIX=-0.24可以查找lib/freebasic-0.24/而不是lib/freebasic/.对应的ENABLE_SUFFIX = foo makefile选项,这调整编译器工作在新的目录布局。
- -d ENABLE_PREFIX=/some/path
这导致给定的前缀路径被硬编码到编译器中,禁止使用
Exepath().因此它将不再可重定位。如果它知道编译器不需要重定位,或者如果
exepath()不能正常工作(例如,在FB 0.90.1中,这是FreeBSD的情况),这很有用。
rtlib和gfxlib2源代码配置(CFLAGS)
这样,Unix rtlib / gfxlib2将不会使用X11头,禁用gfxlib2的X11图形驱动程序和一些rtlib的Linux控制台功能(影响multikey()和控制台鼠标处理)。
因此,Linux rtlib不会使用通用鼠标头(gpm.h),禁用Linux {98??9796151}功能。
这样,gfxlib2将不会使用OpenGL头,禁用OpenGL图形驱动程序。