编译器选项: -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库。

参考