编译器命令行选项体系结构如果为--cpu选项指定了体系结构名称,则会编译代码,使其可在支持该体系结构的任何处理器上运行。例如,--Cpu=5TE所生成的代码可由ARM926EJ-S?使用。FPU有些--cpu规范中隐含--fpu的选择。例如,在用--arm选项进行编译时,--cpu=ARM1136JF-S中将隐含--fpu=vfpv2。注意在命令行中用--fpu设置的任意显式FPU都将覆盖隐式FPU。如果既未指定--fpu选项也未指定--cpu选项,则会使用--fpu=softvfp.如果选择了具有FPU的体系结构v7处理器,则缺省FPU类型为--fpu=vfpv3。ARM/Thumb指定支持Thumb指令的处理器或体系结构(如-cpu=ARM7TDMI)时,并不会使编译器生成Thumb代码。该操作只启用要使用的处理器的功能,如长乘法。使用--thumb选项可生成Thumb代码。注意指定目标处理器或体系结构时,可能会导致编译器所生成的对象代码与其他ARM处理器不兼容。例如,如果为体系结构ARMv6编译的代码包含ARMv6特有的指令,则这些代码可能无法在ARM920T处理器上运行。因此,必须选择同时符合您各种需要的处理器。如果要为支持ARMv4T或ARMv5T的处理器编译专用于ARM/Thumb混合系统的代码,则必须指定交互操作选项--apcs=/interwork。缺省情况下,将为支持ARMv5T或更高版本的处理器启用此选项。如果要为Thumb编译代码(即在命令行中使用--thumb选项进行编译),则编译器会尽可能多地使用Thumb指令集编译代码。但编译器可能会在编译过程中生成ARM代码。例如,如果要为Thumb-1处理器编译代码并使用了VFP,则将为ARM编译包含浮点运算的任何函数。2-18ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
编译器命令行选项 2-18 版权所有 © 2007 ARM Limited。保留所有权利。 ARM DUI 0348AC 体系结构 • 如果为 -cpu 选项指定了体系结构名称,则会编译代码,使其 可在支持该体系结构的任何处理器上运行。例如,- - cpu=5TE 所生成的代码可由 ARM926EJ-S® 使用。 FPU • 有些 -cpu 规范中隐含 -fpu 的选择。例如,在用 -arm 选项进 行编译时,- - cpu=ARM1136JF-S 中将隐含 -fpu=vfpv2。 注意 在命令行中用 -fpu 设置的任意显式 FPU 都将覆盖隐式 FPU。 • 如果既未指定 -fpu 选项也未指定 -cpu 选项,则会使用 - - fpu=softvfp。 • 如果选择了具有 FPU 的体系结构 v7 处理器,则缺省 FPU 类 型为 -fpu=vfpv3。 ARM/Thumb • 指定支持 Thumb 指令的处理器或体系结构(如 - - cpu=ARM7TDMI)时,并不会使编译器生成 Thumb 代码。该操 作只启用要使用的处理器的功能,如长乘法。使用 -thumb 选 项可生成 Thumb 代码。 注意 指定目标处理器或体系结构时,可能会导致编译器所生成的 对象代码与其他 ARM 处理器不兼容。例如,如果为体系结构 ARMv6 编译的代码包含 ARMv6 特有的指令,则这些代码可 能无法在 ARM920T 处理器上运行。因此,必须选择同时符合 您各种需要的处理器。 • 如果要为支持 ARMv4T 或 ARMv5T 的处理器编译专用于 ARM/Thumb 混合系统的代码,则必须指定交互操作选项 - - apcs=/interwork。缺省情况下,将为支持 ARMv5T 或更高版 本的处理器启用此选项。 • 如果要为 Thumb 编译代码(即在命令行中使用 -thumb 选项进 行编译),则编译器会尽可能多地使用 Thumb 指令集编译代 码。 但编译器可能会在编译过程中生成 ARM 代码。 例如, 如果要为 Thumb-1 处理器编译代码并使用了 VFP,则将为 ARM 编译包含浮点运算的任何函数
编译器命令行选项如果要为ARMv7-M(如--cpu=Cortex-M3)编译代码,则无需在命令行中指定--thumb,因为ARMv7-M仅支持Thumb-2。限制不能在同一命令行中同时指定处理器和体系结构。另请参阅第2-4页的--apcs=qualifer..qualifier第2-15页的--cpu=list第2-42页的--fpu=name第2-87页的--thumb2.1.20--create_pch=filename此选项指示编译器创建一个具有指定文件名的预编译头文件(PCH)文件。此选项优先于其他所有的PCH选项。语法--create_pch=filename其中filename是要创建的PCH文件的名称。另请参阅第2-71页的--pch.第2-72页的--pch_dir=dir.第2-73页的--[no_pch_messages第2-73页的--[no_Jpch_verbose第2-90页的--use_pch=filename第4-56页的#pragmahdrstop第4-57页的#pragmano_pch编译器用户指南中第2-16页的预编译的头文件2.1.21-Dname[(parm-]ist)][=def]此选项定义宏name。ARMDUI0348AC2-19版权所有2007ARMLimited。保留所有权利
编译器命令行选项 ARM DUI 0348AC 版权所有 © 2007 ARM Limited。保留所有权利。 2-19 • 如果要为 ARMv7-M(如 -cpu=Cortex-M3)编译代码,则无需 在命令行中指定 -thumb,因为 ARMv7-M 仅支持 Thumb-2。 限制 不能在同一命令行中同时指定处理器和体系结构。 另请参阅 • 第2-4 页的-apcs=qualifer.qualifier • 第2-15 页的- - cpu=list • 第2-42 页的- - fpu=name • 第2-87 页的- - thumb 2.1.20 -create_pch=filename 此选项指示编译器创建一个具有指定文件名的预编译头文件 (PCH) 文件。 此选项优先于其他所有的 PCH 选项。 语法 -create_pch=filename 其中: filename 是要创建的 PCH 文件的名称。 另请参阅 • 第2-71 页的- - pch • 第2-72 页的- - pch_dir=dir • 第2-73 页的- -[no_]pch_messages • 第2-73 页的- -[no_]pch_verbose • 第2-90 页的- - use_pch=filename • 第4-56 页的#pragma hdrstop • 第4-57 页的#pragma no_pch • 编译器用户指南中第2-16 页的预编译的头文件 2.1.21 -Dname[(parm-list)][=def] 此选项定义宏 name
编译器命令行选项语法-Dname[(parm-1ist)][=def]其中name是要定义的宏的名称。parm-list是以逗号分隔的宏参数的可选列表。通过将宏参数列表追加到宏名称中,可以定义函数风格的宏。参数列表必须括在括号内。指定多个参数时,不能在列表中的逗号和参数名称之间留有空格。注意在UNIX系统上,括号可能需要转义。=def是一个可选的宏定义。如果省略=def,则编译器会将name定义为值1。若要在命令行中包含识别为标记的字符,请将宏定义括号双引号内。用法指定-Dname与将文本#definename放在每个源文件的开头具有相同的效果。限制编译器按以下顺序定义和取消定义宏1.编译器预定义的宏2.使用-Dname显式定义的宏3.使用-Uname显式取消定义的宏。示例在命令行中指定以下选项-DMAX(X,Y)="((X > Y) ? X : Y)"相当于在每个源文件开头定义以下宏#defineMAX(X, Y) ((X >Y)? X : Y)2-20ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
编译器命令行选项 2-20 版权所有 © 2007 ARM Limited。保留所有权利。 ARM DUI 0348AC 语法 -Dname[(parm-list)][=def] 其中: name 是要定义的宏的名称。 parm-list 是以逗号分隔的宏参数的可选列表。通过将宏参数列表追加到宏 名称中,可以定义函数风格的宏。 参数列表必须括在括号内。指定多个参数时,不能在列表中的逗号 和参数名称之间留有空格。 注意 在 UNIX 系统上,括号可能需要转义。 =def 是一个可选的宏定义。 如果省略 =def,则编译器会将 name 定义为值 1。 若要在命令行中包含识别为标记的字符,请将宏定义括号双引号 内。 用法 指定 -Dname 与将文本 #define name 放在每个源文件的开头具有相同的效果。 限制 编译器按以下顺序定义和取消定义宏: 1. 编译器预定义的宏 2. 使用 -Dname 显式定义的宏 3. 使用 -Uname 显式取消定义的宏。 示例 在命令行中指定以下选项: -DMAX(X,Y)="((X > Y) ? X : Y)" 相当于在每个源文件开头定义以下宏: #define MAX(X, Y) ((X > Y) ? X : Y)
编译器命令行选项二者效果相同。另请参阅第2-13页的-C.第2-34页的-E.第2-88页的-Uname第4-106页的编译器预定义.2.1.22--[no_]data_reorder此选项允许或禁止对顶级数据项(如全局变量)进行自动重新排序。编译器可通过消除数据项之间的多余空格来节省内存。但如果旧代码对有关编译器执行的数据排序的假定无效,则--data_reorder可能会破坏该代码。ISOC标准不保证数据顺序,因此必须避免编写依赖于任何假定排序的代码。如果需要数据排序,则应将数据项放入结构中。缺省选项缺省为--data_reorder。2.1.23--[no_]debug此选项允许或禁止在当前编译过程中生成调试表。无论是否使用--debug,编译器都会生成相同的代码。唯一差别就是调试表存在与否。缺省选项缺省为--no_debug。使用--debug不会影响优化设置。缺省情况下,单独使用--debug选项相当于使用以下选项--debug--dwarf3--debug_macros另请参阅--[no_Jdebug_macros第2-33页的--dwarf2ARMDUI0348AC2-21版权所有2007ARMLimited。保留所有权利
编译器命令行选项 ARM DUI 0348AC 版权所有 © 2007 ARM Limited。保留所有权利。 2-21 二者效果相同。 另请参阅 • 第2-13 页的- C • 第2-34 页的- E • 第2-88 页的- Uname • 第4-106 页的编译器预定义 2.1.22 -[no_]data_reorder 此选项允许或禁止对顶级数据项(如全局变量)进行自动重新排序。 编译器可通过消除数据项之间的多余空格来节省内存。但如果旧代码对有关编 译器执行的数据排序的假定无效,则 -data_reorder 可能会破坏该代码。 ISO C 标准不保证数据顺序,因此必须避免编写依赖于任何假定排序的代码。如 果需要数据排序,则应将数据项放入结构中。 缺省选项 缺省为 -data_reorder。 2.1.23 -[no_]debug 此选项允许或禁止在当前编译过程中生成调试表。 无论是否使用 -debug,编译器都会生成相同的代码。唯一差别就是调试表存在 与否。 缺省选项 缺省为 -no_debug。 使用 -debug 不会影响优化设置。缺省情况下,单独使用 -debug 选项相当于使用 以下选项: -debug -dwarf3 -debug_macros 另请参阅 • -[no_]debug_macros • 第2-33 页的- - dwarf2
编译器命令行选项第2-34页的--dwarf3第2-67页的-Onum2.1.24--[no_]debug_macros此选项允许或禁止生成预处理程序宏定义的调试表条目。用法使用--no_debug_macros可减少调试映像的大小。此选项必须与--debug选项一起使用。缺省选项缺省为--debug_macros。另请参阅.--[no_Jdebug5--default_extension=ext2.1.25此选项使您可以将目标文件的扩展名从缺省扩展名(.0)更改为所选扩展名。语法--default_extension=ext其中是所选的文件扩展名。ext示例以下示例创建一个名为test.obj而不是test.o的目标文件armcc --default_extension=obj -c test.c注意-ofilename选项可覆盖此文件名。例如,以下命令将产生一个名为test.o的目标文件armcc --default_extension=obj -o test.o -c test.c2-22ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
编译器命令行选项 2-22 版权所有 © 2007 ARM Limited。保留所有权利。 ARM DUI 0348AC • 第2-34 页的- - dwarf3 • 第2-67 页的- Onum 2.1.24 -[no_]debug_macros 此选项允许或禁止生成预处理程序宏定义的调试表条目。 用法 使用 -no_debug_macros 可减少调试映像的大小。 此选项必须与 -debug 选项一起使用。 缺省选项 缺省为 -debug_macros。 另请参阅 • -[no_]debug 2.1.25 -default_extension=ext 此选项使您可以将目标文件的扩展名从缺省扩展名 (.o) 更改为所选扩展名。 语法 -default_extension=ext 其中: ext 是所选的文件扩展名。 示例 以下示例创建一个名为 test.obj 而不是 test.o 的目标文件: armcc -default_extension=obj -c test.c 注意 - o filename 选项可覆盖此文件名。例如,以下命令将产生一个名为 test.o 的目标 文件: armcc -default_extension=obj -o test.o -c test.c