Next: Run-time Target, Previous: Target Structure, Up: Target Macros
一个C表达式,用来确定选项-char是否接受参数。 值应该为那个选项接受的参数个数,对于许多选项其为0。
缺省情况下,该宏被定义为
DEFAULT_SWITCH_TAKES_ARG
, 其可以正常处理标准的选项。除非你希望增加额外的接受参数的选项, 否则不需要定义SWITCH_TAKES_ARG
。 任何重定义都应该先调用DEFAULT_SWITCH_TAKES_ARG
,然后再检查额外的选项。
一个C表达式,用来确定选项-name是否接受参数。 值应该为那个选项接受的参数个数,对于许多选项其为0。 该宏不同于
SWITCH_TAKES_ARG
,是用于选项名为多个字符的情况。缺省情况下,该宏被定义为
DEFAULT_WORD_SWITCH_TAKES_ARG
, 其可以正常处理标准的选项。除非你希望增加额外的接受参数的选项, 否则不需要定义WORD_SWITCH_TAKES_ARG
。 任何重定义都应该先调用DEFAULT_WORD_SWITCH_TAKES_ARG
,然后再检查额外的选项。
一个C表达式,用来确定选项-char是否在生成可执行程序之前停止编译。 值为布尔型,如果选项确实停止生成可执行程序则为非0,否则为0。
缺省情况下,该宏被定义为
DEFAULT_SWITCH_CURTAILS_COMPILATION
, 其可以正常处理标准的选项。除非你希望增加额外的影响可执行程序生成的选项, 否则不需要定义SWITCH_CURTAILS_COMPILATION
。 任何重定义都应该先调用DEFAULT_SWITCH_CURTAILS_COMPILATION
, 然后再检查额外的选项。
如果定义,则为字符串对(pairs of strings)列表, 其中第一个字符串为gcc驱动程序的一个可能的命令行目标, 第二个字符串为空格分隔的(不支持tab和其它whitespace)选项列表, 用来替换第一个选项。 定义该列表的目标机要负责确保结果是有效的。替换选项不可以为
--opt
风格的, 它们必须为-opt
风格的。该宏的目的是为选择multilib提供一种替换机制, 例如通过一个选项可以打开许多选项,其中一些用来选择multilib。 例如,在下面这个无意义的定义中, -malt-abi, -EB和-mspoo会导致不同的multilib被选择:#define TARGET_OPTION_TRANSLATE_TABLE \ { "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \ { "-compat", "-EB -malign=4 -mspoo" }
驱动器本身的specs列表。其应该为一个字符串数组的适当的初始化值, 并且不使用大括号包裹。
驱动器将这些specs应用到它自己的命令行上,位于加载缺省specs文件 (而不是由命令行指定的)和选择multilib目录或者运行任何子命令之间。 驱动器按照给定的顺序来应用它们,所以每个spec可以依赖于先前增加的选项。 还可以使用通常的方式,用‘%<option’来移除选项。
当一个port具有多个相互依赖的目标机选项时,该宏会有帮助。 它提供了一种标准化命令行的方法,使得其它specs的书写变得容易些。
如果不需要做任何事情的话,则不要定义该宏。
一个specs列表,用于支持驱动器中的配置时(configure-time)缺省选项 (即,--with选项)。 其应该为一个结构体数组的适当的初始化值,每个元素包含两个字符串, 并且不带有最外层的大括号对。
字符串对的第一项为缺省名字。其必须匹配目标机的config.gcc中的代码。 第二项为一个spec,当那个缺省名字被指定的时候会被应用。 在spec中,字符串‘%(VALUE)’出现的所有地方都将被缺省值替换。
驱动器将这些specs应用到它自己的命令行上, 位于加载缺省specs文件和处理
DRIVER_SELF_SPECS
之间, 使用与DRIVER_SELF_SPECS
相同的机制。如果不需要做任何事情的话,则不要定义该宏。
一个C字符串常量,告诉GCC驱动程序要传给CPP的选项。 其还可以指定如何将你传给GCC的选项转换成GCC传给CPP的选项。
如果不需要做任何事情的话,则不要定义该宏。
一个C字符串常量,告诉GCC驱动程序要传给
cc1
,cc1plus
,f771
和其它语言前端的选项。 其还可以指定如何将你传给GCC的选项转换成GCC传给前端的选项。如果不需要做任何事情的话,则不要定义该宏。
一个C字符串常量,告诉GCC驱动程序要传给
cc1plus
的选项。 其还可以指定如何将你传给GCC的选项转换成GCC传给cc1plus
的选项。如果不需要做任何事情的话,则不要定义该宏。 注意在CC1_SPEC中定义的所有选项已经被传给
cc1plus
, 所以不需要在CC1PLUS_SPEC中重复CC1_SPEC的内容。
一个C字符串常量,告诉GCC驱动程序要传给汇编器的选项。 其还可以指定如何将你传给GCC的选项转换成GCC传给汇编器的选项。 参见文件sun3.h中的例子。
如果不需要做任何事情的话,则不要定义该宏。
一个C字符串常量,告诉GCC驱动程序如何在运行正常的汇编器之后,来运行任何清除程序。 通常,不需要该宏。参见文件mips.h中的例子。
如果不需要做任何事情的话,则不要定义该宏。
如果驱动器应该传给汇编器一个由单横线-组成的参数, 来指示它从标准输入(其将为一个与编译器输出相连接的管道)读取时, 则定义该宏,并且不需要给出定义值。 该参数在任何指定输出文件名的-o选项后面被给出。
如果不定义该宏,则汇编器被认为在没有传给任何非选项参数时,才从标准输入读取。 如果你的汇编器根本不能从标准输入读取,则使用‘%{pipe:%e}’; 参见mips.h中的例子。
一个C字符串常量,告诉GCC驱动程序要传给连接器的选项。 其还可以指定如何将你传给GCC的选项转换成GCC传给连接器的选项。
如果不需要做任何事情的话,则不要定义该宏。
另一个C字符串常量,与
LINK_SPEC
的用法很相似。 两者的区别是LIB_SPEC
用于传给连接器的命令的结尾处。如果该宏没有被定义,则提供缺省的方式,从通常的地方来加载标准C库。 参见gcc.c。
另一个C字符串常量, 告诉GCC驱动程序如何以及什么时候将对libgcc.a的引用放到连接器的命令行中。 该常量同时被放在
LIB_SPEC
的值的前面和后面。如果该宏没有被定义,则GCC驱动器提供了一个缺省的方式, 将字符串-lgcc传给连接器。
缺省情况下,如果
ENABLE_SHARED_LIBGCC
被定义, 则LIBGCC_SPEC
不直接被驱动程序使用,而是根据命令行标记-static, -shared, -static-libgcc和-shared-libgcc的值, 进行修改,从而引用libgcc.a的不同版本。在一些目标机上,这些修改并不合适, 这样就可以定义REAL_LIBGCC_SPEC
。REAL_LIBGCC_SPEC
告诉驱动器如何将对libgcc的引用放到连接器命令行中, 不过不像LIBGCC_SPEC
,它不经过修改,被直接使用。
一个宏,用于控制在
REAL_LIBGCC_SPEC
中提到的对LIBGCC_SPEC
的修改。 如果非0,则会生成一个spec,当不使用任何-static
,-static-libgcc
或-shared-libgcc
来连接的时候, 将使用–as-needed和静态异常处理库所在位置的共享libgcc。
如果定义,则该C字符串常量被增加到
LINK_SPEC
中。 当USE_LD_AS_NEEDED
为0或者未定义时, 其还影响在REAL_LIBGCC_SPEC
中提到的对LIBGCC_SPEC
的修改。
另一个C字符串常量,与
LINK_SPEC
的用法很相似。 两者的不同之处是STARTFILE_SPEC
用于传给连接器的命令的最开始处。如果该宏没有被定义,则会提供一种缺省方式, 从通常的地方来加载标准C启动(startup)文件。参见gcc.c。
另一个C字符串常量,与
LINK_SPEC
的用法很相似。 两者的不同之处是ENDFILE_SPEC
用于传给连接器的命令的最末尾处。如果不需要做任何事情的话,则不要定义该宏。
GCC
-v
将会打印GCC被配置使用的线程模式。然而,在有些平台上这是无法工作的, 像AIX 4.3。对于这样的平台,将THREAD_MODEL_SPEC
定义为没有空格的字符串来 命名可识别的线程模式的名字。%*
为该宏的缺省值, 将扩展为在config.gcc中设置的thread_file
的值。
定义该宏,当GCC使用sysroot被配置时,来为目标机的sysroot增加一个suffix。 这将导致GCC在sysroot+suffix下查找usr/lib等。
定义该宏,当GCC使用sysroot被配置时,来为目标机的sysroot增加一个headers_suffix。 这将导致GCC将更新的sysroot+headers_suffix传给CPP, 使其在sysroot+headers_suffix下查找usr/include等。
定义该宏,来提供放在specs文件中, 可以被各种specification,像
CC1_SPEC
,使用的额外的specification。定义应该为一个结构体数组的初始化值,其包含一个字符串常量, 定义了specification的名字,以及一个字符串常量,提供相应的specification。
如果不需要做任何事情的话,则不要定义该宏。
当一种体系结构包含多个相关的目标机,所具有的各种
..._SPECS
彼此很相似 的时候,EXTRA_SPECS
会很有用,维护者会希望有一个地方来集中保存这些定义。例如,PowerPC System V.4的目标机使用
EXTRA_SPECS
, 在System V调用序列被使用时,来定义_CALL_SYSV
, 在较老的基于AIX的调用序列被使用时,来定义_CALL_AIX
。config/rs6000/rs6000.h目标机文件这样定义:
#define EXTRA_SPECS \ { "cpp_sysv_default", CPP_SYSV_DEFAULT }, #define CPP_SYS_DEFAULT ""config/rs6000/sysv.h目标机文件这样定义:
#undef CPP_SPEC #define CPP_SPEC \ "%{posix: -D_POSIX_SOURCE } \ %{mcall-sysv: -D_CALL_SYSV } \ %{!mcall-sysv: %(cpp_sysv_default) } \ %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" #undef CPP_SYSV_DEFAULT #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"而config/rs6000/eabiaix.h目标机文件将
CPP_SYSV_DEFAULT
定义为:#undef CPP_SYSV_DEFAULT #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
一个C字符串常量,给出执行连接器所需的完整的命令行。当定义时, 每次在gcc.c中对连接器命令行的修改,你都需要更新你的port。 因此,只有当你需要完全重定义所调用的连接器的命令行,并且没有其他方式来完成时, 才定义该宏。可以通过
LINK_GCC_C_SEQUENCE_SPEC
来替代该宏。
一个非零值, 使得collect2从连接命令中移除重复的-Ldirectory搜索目录。 如果移除重复的搜索目录会改变连接器的语法,则不要定义为非零。
定义该宏为字符串数组的初始化C表达式,用来告诉驱动器程序对于该目标机, 哪些选项是缺省的,因此当使用
MULTILIB_OPTIONS
时,不需要单独处理。如果在target makefile片段中没有定义
MULTILIB_OPTIONS
, 或者如果在MULTILIB_OPTIONS
中列出的选项中没有被设为缺省的, 则不要定义该宏。参见Target Fragment。
如果定义,该宏为一个可选前缀,其在
STANDARD_EXEC_PREFIX
之后进行尝试。 当使用-b选项,或者编译器被构建为交叉编译器时, 将不搜索MD_EXEC_PREFIX
。如果你定义了MD_EXEC_PREFIX
, 则要确保将其增加到configure.in中用于查找汇编器的目录列表中。
定义该宏为C字符串常量, 如果你希望覆盖将
libdir
作为前缀来搜索起始文件crt0.o等的标准选择。 当构建为交叉编译器时,STANDARD_STARTFILE_PREFIX
不被搜索。
定义该宏为C字符串常量,如果你希望覆盖在缺省前缀之后, 将
/lib
作为前缀来搜索起始文件crt0.o等的标准选择。 当构建为交叉编译器时,STANDARD_STARTFILE_PREFIX_1
不被搜索。
定义该宏为C字符串常量,如果你希望覆盖在缺省前缀之后, 将
/lib
作为前缀来搜索起始文件crt0.o等的标准选择。 当构建为交叉编译器时,STANDARD_STARTFILE_PREFIX_2
不被搜索。
如果定义,该宏提供了额外的前缀,在标准前缀之后被尝试。 当使用-b选项,或者编译器被构建为交叉编译器时, 将不搜索
MD_EXEC_PREFIX
。
定义该宏为C字符串常量,如果你希望为驱动器调用的程序,例如汇编器和连接器, 来设置的环境变量。驱动器将该宏的值传给
putenv
来初始化需要的环境变量。
定义该宏为C字符串常量,如果你希望覆写当尝试搜索局部头文件时, 将/usr/local/include作为缺省前缀的标准选择。 在搜索顺序中,
LOCAL_INCLUDE_DIR
位于SYSTEM_INCLUDE_DIR
之前。交叉编译器既不搜索/usr/local/include,也不搜索它的替换者。
定义该宏作为C字符串常量, 如果你希望指定一个系统特定的目录在标准目录之前来搜索头文件。 在搜索顺序中,
SYSTEM_INCLUDE_DIR
位于STANDARD_INCLUDE_DIR
之前。交叉编译器不使用该宏,并且不搜索所指定的目录。
定义该宏为C字符串常量, 如果你希望覆写将/usr/include作为缺省前缀来尝试搜索头文件的标准选择。
交叉编译器忽略该宏,并且不搜索/usr/include和它的替换者。
“component”对应于
STANDARD_INCLUDE_DIR
。关于组件的描述, 参见下面的INCLUDE_DEFAULTS
。如果你没有定义该宏,则不使用组件。
定义该宏,如果你希望覆写include文件的全部缺省搜索路径。对于一个本地编译器, 缺省搜索路径通常由
GCC_INCLUDE_DIR
,LOCAL_INCLUDE_DIR
,SYSTEM_INCLUDE_DIR
,GPLUSPLUS_INCLUDE_DIR
和STANDARD_INCLUDE_DIR
组成。另外,GPLUSPLUS_INCLUDE_DIR
和GCC_INCLUDE_DIR
由Makefile自动定义,并指定为GCC的私有搜索区域。 目录GPLUSPLUS_INCLUDE_DIR
只用于C++程序。该定义为一个结构体数组的初始化值。 每个数组元素具有四个元素:目录名(字符串常量), 组件名(也是字符串常量),一个标志用来指示只用于C++, 以及一个标志用来表示当编译C++时,对该目录下include进来的代码, 不需要使用
extern ‘
C’
进行包裹。 使用空元素来标记数组的结尾。组件名指出了include文件属于什么GNU包,如果存在,则全部使用大写字母。 例如,可能为‘GCC’或‘BINUTILS’。 如果程序包是商家提供的操作系统的一部分,则将名字写为‘0’。
例如,这是用于VAX/VMS的定义:
#define INCLUDE_DEFAULTS \ { \ { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ { ".", 0, 0, 0}, \ { 0, 0, 0, 0} \ }
这些是尝试查找exec文件的前缀顺序:
GCC_EXEC_PREFIX
,
或者如果GCC_EXEC_PREFIX
没有被设置并且编译器没有被安装到配置时的prefix处,
则搜索编译器实际被安装的位置。
COMPILER_PATH
指定的目录。
STANDARD_EXEC_PREFIX
,如果编译器安装在配置时的prefix处。
MD_EXEC_PREFIX
,如果定义,仅当是本地编译器。
这些是尝试查找启动文件的前缀顺序:
GCC_EXEC_PREFIX
,或者基于工具链的安装位置被自动确定的值。
LIBRARY_PATH
指定的目录(或者port特定的名字,只用于本地编译器,
交叉编译器不使用)。
STANDARD_EXEC_PREFIX
,但只当工具链被安装在配置的prefix处,
或者为本地编译器。
MD_EXEC_PREFIX
,如果定义,仅当是本地编译器。
MD_STARTFILE_PREFIX
,如果定义,
仅当为本地编译器,或者具有目标机系统根目录(system root)。
MD_STARTFILE_PREFIX_1
,如果定义,
仅当为本地编译器,或者具有目标机系统根目录。
STANDARD_STARTFILE_PREFIX
,带有任何sysroot的修改。
如果该路径相关,则会加上GCC_EXEC_PREFIX
前缀和机器后缀,
或者STANDARD_EXEC_PREFIX
和机器后缀。
STANDARD_STARTFILE_PREFIX_1
,仅当为本地编译器,
或者具有目标机系统根目录。该宏的缺省值为/lib/。
STANDARD_STARTFILE_PREFIX_2
,仅当为本地编译器,
或者具有目标机系统根目录。该宏的缺省值为/usr/lib/。