编译器选项: -target
设置交叉编译的目标平台
语法
-target
<
platform
>
参数
platform
目标平台。识别值:
dos
win32
win64
xbox
<os>-<arch>
<os>
可以是以下之一:
linux
cygwin
darwin
freebsd
netbsd
openbsd
<arch>
可以是以下之一:
x86
x86_64
arm
aarch64
例子:
linux-x86
linux-x86_64
linux-arm
linux-aarch64
freebsd-x86
freebsd-x86_64
...
为了向后兼容,可以识别以下值。他们将选择相应的操作系统以及编译器的默认架构(与主机相同),因为这些值不会明确指定体系结构。
linux
cygwin
darwin
freebsd
netbsd
openbsd
正常
fbc(例如FB-linux版本)还可以识别GNU三元组,例如:
i686-w64-mingw32
x86_64-w64-mingw32
i686-pc-linux-gnu
arm-linux-gnueabihf
...
说明
可以使用
-target
编译器选项为与编译和链接源代码的主机不同的平台创建可执行文件。必须安装适当的库和交叉编译工具(汇编器,链接器)才能使交叉编译工作(参见
FB和交叉编译
)。
如果给出
-target <platform>
,编译器将或多或少地编译程序,就像在给定平台上编译一样。这会影响哪些
__FB_*__
操作系统特定符号将被预定义,默认调用约定,对象和可执行文件格式(例如,ELF / COFF),可用的运行时库和函数等
使用独立的FB设置,如FB-dos或FB-win32版本:
指定
-target <platform>
会导致编译器使用
bin/<platform>/
目录中的编译器工具和
lib/<platform>/
目录中的目标特定库。例如,
-target win32
使编译器为Win32编译,并使用
bin/win32/
中的工具和来自
lib/win32/
的库。
指定与主机匹配的
-target
选项(例如
-target win32
上的
-target win32
)是不必要的(但是安全的)。它不会对编译过程产生影响。
如果未指定
-target
,编译器将默认为本机系统进行编译。然后,它将使用与本机系统相对应的
bin/
和
lib/
目录中的编译器工具和库。
使用正常的FB设置,如FB-linux版本:
指定
-target <platform>
会导致编译器将
<platform>-
字符串前缀到binutils和gcc的可执行文件名。例如,指定
-target i686-w64-mingw32
会导致编译器调用
i686-w64-mingw32-ld
而不是
ld
(除了链接器之外的其他工具也是这样)。这允许fbc与binutils / gcc交叉编译器工具链集成,并且匹配通常在Linux发行版上安装交叉编译工具。
请注意,在这里指定的东西通常不会有意义(989796063)。它导致编译器尝试使用通常不存在的
win32-ld
,因为用于Windows的交叉编译的binutils / gcc工具链通常具有名称,例如
i686-pc-mingw32
,而不仅仅是
win32
.因此,需要指定
-target i686-pc-mingw32
而不是
-target win32
.
为了向后兼容,如果给定的
platform
字符串描述主机,并且是FB目标名称(具有独立FB设置的
-target
选项接受的值)而不是GNU三元组,则
-target
选项将忽略,并且
<platform>-
字符串不会被编入工具前缀。例如,这允许
-target linux
使用FB-linux版本。它将被忽略,而不是使编译器尝试使用
linux-ld
而不是
ld
.
如果未指定
-target
,则编译器默认为本机系统进行编译,并且将调用不具有目标特定前缀的binutils / gcc。这允许fbc与常规的Linux(和类似的)系统集成,其中安装了binutils / gcc进行本地编译,而没有任何目标特定的前缀。
除了自己的运行时库之外的库,通过运行
gcc -print-file-name=...
(或
<platform>-gcc -print-file-name=...
)来定位。这允许fbc在不知道确切的安装目录的情况下使用安装在Linux和类似系统上的系统和gcc库。
参考
Using the Command Line
FB and cross-compiling