按功能分组的编译器选项
本章总结了按功能分组的 C 编译器选项。表 36提供了这些选项以及编译器命令行语法的详细说明。
A.1 按功能汇总的选项
在本节中,编译器选项按功能分组以便提供快速参考。有关各个选项的详细说明,请参阅C 编译器选项参考。某些标志用于多个目的,因此出现多次。
这些选项适用于除了特别注明之外的所有平台。基于 SPARC 的系统所特有的功能标识为 (SPARC),基于 x86/x64 的系统所特有的功能标识为 (x86)。仅适用于 Oracle Solaris 平台的选项标有 (Oracle Solaris)。适用于 Oracle Linux 平台的选项标有 (Oracle Linux)。
A.1.1 优化和性能选项
表 23 优化和性能选项
|
|
-fast
|
选择用于控制可执行代码速度的编译选项的最优组合。
|
-fma
|
启用自动生成浮点混合乘加指令。
|
-library=sunperf
|
与 Sun 性能库链接。
|
-p
|
准备目标代码以收集要进行分析的数据。
|
-xalias_level
|
启用编译器执行基于类型的别名分析和优化。
|
-xannotate
|
指示编译器创建可供优化和监测工具 binopt(1)、code-analyzer(1)、discover(1)、collect(1) 和 uncover(1) 使用的二进制文件。
|
-xbinopt
|
准备二进制文件以便以后进行优化、转换和分析。
|
-xbuiltin
|
改善用于调用标准库函数的代码的优化。
|
-xdepend
|
分析循环以了解迭代间数据依赖性并执行循环重构。
|
-xF
|
启用通过链接程序对数据和函数进行重新排序。
|
-xglobalize
|
控制文件静态变量的全局化,但是不控制函数的全局化。
|
-xhwcprof
|
为基于硬件计数器的分析启用编译器支持。
|
-xinline
|
尝试仅内联指定的那些函数。
|
-xinline_param
|
手动更改编译器用来确定何时内联函数调用的试探式方法。
|
-xinline_report
|
生成在编译器内联函数时写入标准输出的报告。
|
-xinstrument
|
编译并检测程序,以供线程分析器进行分析。
|
-xipo
|
通过调用过程间分析组件来执行整个程序优化。
|
-xipo_archive
|
允许跨文件优化包括归档 (.a) 库。
|
-xipo_build
|
避免初始传递期间通过编译器优化而仅在链接时优化,从而缩短编译时间。
|
-xkeepframe
|
禁止对命名函数进行与堆栈相关的优化。
|
-xjobs
|
设置编译器将创建的进程数。
|
-xlibmil
|
内联某些库例程以便更快执行。
|
-xlic_lib=sunperf
|
已过时。使用 -library=sunperf 可链接到 Sun 性能库。
|
-xlinkopt
|
对可重定位对象文件执行链接时优化。
|
-xlibmopt
|
启用优化数学例程的库。
|
-xmaxopt
|
将 pragma opt 的级别限制为指定的级别。
|
-xnolibmil
|
不内联数学库例程。
|
-xnolibmopt
|
不启用优化数学例程的库。
|
-xO
|
优化对象代码。
|
-xnorunpath
|
禁止在可执行文件中包含共享库的运行时搜索路径。
|
-xpagesize
|
设置堆栈和堆的首选页面大小。
|
-xpagesize_stack
|
设置堆栈的首选页面大小。
|
-xpagesize_heap
|
设置堆的首选页面大小。
|
-xpch
|
减少应用程序的编译时间,该应用程序的源文件共享一组共同的 include 文件。
|
–xpec
|
生成可移植的可执行代码 (Portable Executable Code, PEC) 二进制文件,该文件可用于其他调优和故障排除。
|
-xpchstop
|
可以与 -xpch 一起使用来指定活前缀的最后一个 include 文件。
|
-xprefetch
|
启用预取指令。
|
-xprefetch_level
|
控制 -xprefetch=auto 设置的自动插入预取指令的主动性
|
-xprefetch_auto_type
|
控制生成间接预取的方式。
|
-xprofile
|
收集用于分析的数据或使用分析进行优化。
|
-xprofile_ircache
|
通过重用在 -xprofile=collect 阶段中保存的编译数据来缩短 -xprofile=use 阶段的编译时间。
|
-xprofile_pathmap
|
支持单个分析目录中有多个程序或共享库。
|
-xrestrict
|
将返回赋值指针的函数参数视为限定指针。
|
-xsafe
|
(SPARC) 允许编译器假定不发生基于内存的陷阱。
|
-xspace
|
不优化或并行化会增加代码大小的循环。
|
-xthroughput
|
指示编译器当多个进程同时在系统上运行时应用程序将会运行。
|
-xunroll
|
建议编译器解开循环 n 次。
|
|
A.1.2 编译时选项和链接时选项
下表列出了在链接时和编译时都必须指定的选项。
表 24 编译时选项和链接时选项
|
|
-fast
|
选择用于控制可执行代码速度的编译选项的最优组合。
|
-fopenmp
|
与 -xopenmp=parallel 等效。
|
-m32 |-m64
|
指定编译的二进制对象的数据类型模型。
|
-mt
|
扩展为 -D_REENTRANT -lthread 的宏选项。
|
-p
|
准备对象代码以收集要通过 prof(1) 进行分析的数据
|
-xarch
|
指定指令集体系结构。
|
-xautopar
|
为多个处理器启用自动并行化。
|
-xhwcprof
|
为基于硬件计数器的分析启用编译器支持。
|
-xipo
|
通过调用过程间分析组件来执行整个程序优化。
|
-xlinkopt
|
对可重定位对象文件执行链接时优化。
|
-xmemalign
|
(SPARC) 指定假定的最大内存对齐以及未对齐的数据访问的行为。
|
-xopenmp
|
支持用于显式并行化的 OpenMP 接口,包括一组源代码指令、运行时库例程和环境变量。
|
-xpagesize
|
设置堆栈和堆的首选页面大小。
|
-xpagesize_stack
|
设置堆栈的首选页面大小。
|
-xpagesize_heap
|
设置堆的首选页面大小。
|
-xpatchpadding
|
在各个函数启动之前保留内存区域。
|
-xpg
|
准备对象代码来收集数据以使用 gprof(1) 进行分析。
|
-xprofile
|
收集用于分析的数据或使用分析进行优化。
|
-xs
|
(Oracle Solaris) 将调试信息从对象文件链接到可执行文件。
|
-xvector=lib
|
启用对向量库函数调用的自动生成。
|
|
A.1.3 数据对齐选项
表 25 数据对齐选项
|
|
-xchar_byte_order
|
通过按指定的字节顺序放置多字符字符常量的字符来生成整型常量。
|
-xdepend
|
分析循环以了解迭代间数据依赖性并执行循环重构。
|
-xmemalign
|
(SPARC) 指定假定的最大内存对齐以及未对齐的数据访问的行为。
|
-xsegment_align
|
使驱动程序在链接行上包括特殊映射文件。
|
|
A.1.4 数值和浮点选项
表 26 数值和浮点选项
|
|
-flteval
|
(x86) 控制浮点求值。
|
-fma
|
启用自动生成浮点混合乘加指令。
|
-fnonstd
|
使对浮点运算硬件进行非标准初始化。
|
-fns
|
打开非标准浮点模式。
|
-fprecision
|
(x86) 初始化浮点控制字中的舍入精度模式位
|
-fround
|
设置在程序初始化过程中在运行时建立的 IEEE 754 舍入模式。
|
-fsimple
|
允许优化器简化关于浮点运算的假定。
|
-fsingle
|
使编译器将 float 表达式以单精度而不双精度形式进行求值。
|
-fstore
|
(x86) 使编译器将浮点表达式或函数的值转换为赋值左侧的类型
|
-ftrap
|
设置启动时生效的 IEEE 754 陷阱模式。
|
-nofstore
|
(x86) 不将浮点表达式或函数的值转换为赋值左侧的类型
|
-xdepend
|
分析循环以了解迭代间数据依赖性并执行循环重构。
|
-xlibmieee
|
在异常情况下对于数学例程强制返回 IEEE 754 样式的值。
|
-xsfpconst
|
以单精度形式表示无后缀的浮点常量
|
-xvector
|
启用对向量库函数调用的自动生成。
|
|
A.1.5 并行化选项
表 27 并行化选项
|
|
-fopenmp
|
与 -xopenmp=parallel 等效。
|
-mt
|
扩展为 -D_REENTRANT -lthread 的宏选项。
|
-xautopar
|
为多个处理器启用自动并行化。
|
-xcheck
|
添加针对堆栈溢出的运行时检查并初始化局部变量。
|
-xdepend
|
分析循环以了解迭代间数据依赖性并执行循环重构。
|
-xloopinfo
|
显示哪些循环进行了并行化处理,哪些循环没有进行并行化处理。
|
-xopenmp
|
支持用于显式并行化的 OpenMP 接口,包括一组源代码指令、运行时库例程和环境变量。
|
-xreduction
|
在自动并行化期间启用约简识别。
|
-xrestrict
|
将返回赋值指针的函数参数视为限定指针。
|
-xthreadvar
|
控制线程局部变量的实现。
|
-xthroughput
|
指定当多个进程同时在系统上运行时运行应用程序。
|
-xvpara
|
对于已指定了 #pragma MP 指令,但可能未针对并行化正确指定指令的循环发出警告。
|
|
A.1.6 源代码选项
表 28 源代码选项
|
|
-A
|
将 name 作为谓词与指定的令牌相关联,就像使用 #assert 预处理指令一样。
|
-ansi
|
与 -std=c89 等效。
|
-C
|
禁止预处理程序删除注释,除非这些注释位于预处理指令行上。
|
-D
|
将 name 与指定的令牌相关联,就像使用 #define 预处理指令一样。
|
-E
|
仅通过预处理程序运行源文件并将输出发送到 stdout。
|
-fd
|
报告 K&R 样式的函数定义和声明。
|
-H
|
打印到标准错误,一行一个,当前编译过程中包括每个文件的路径名。
|
-I
|
将目录添加到要搜索具有相对文件名的 #include 文件的列表中。
|
–include
|
使编译器处理参数 filename 的方式就相当于其是位于主源文件首行的 #include 预处理程序指令。
|
-P
|
仅通过 C 预处理程序运行源文件。
|
-pedantic
|
强制要求严格遵循非 ANSI 构造的错误/警告。
|
-preserve_argvalues
|
(x86) 在堆栈中保存基于寄存器的函数参数的副本。
|
-std
|
指定 C 语言标准。
|
-U
|
删除预处理程序符号 name 的任何初始定义。
|
-X
|
-X 选项指定符合 ISO C 标准的各种级别。
|
-xCC
|
接受 C++ 样式的注释。
|
-xc99
|
控制编译器识别支持的 C99 功能。
|
-xchar
|
帮助在 char 定义为无符号的系统上进行迁移。
|
-xcsi
|
允许 C 编译器接受在不符合 ISO C 源字符代码要求的语言环境中编写的源代码
|
-xM
|
仅对命名的 C 程序运行预处理程序,并请求生成 makefile 依赖性并将结果发送到标准输出
|
-xM1
|
收集 -xM 等依赖性信息,但排除 /usr/include 文件。
|
-xMD
|
像 -xM 一样生成 makefile 依赖性,但包括编译。
|
-xMF
|
指定可存储 makefile 依赖性信息的文件名。
|
-xMMD
|
生成 makefile 依赖性,但排除系统头。
|
-xP
|
打印此模块中定义的所有 K&R C 函数的原型
|
-xpg
|
准备对象代码来收集数据以使用 gprof(1) 进行分析。
|
-xtrigraphs
|
确定三字符序列的识别。
|
-xustr
|
启用识别由 16 位字符构成的文本字符串。
|
|
A.1.7 编译的代码选项
表 29 编译的代码选项
|
|
-c
|
指示编译器禁止与 ld(1) 链接,并在当前工作目录中为每个源文件生成一个 .o 文件
|
-o
|
为输出文件命名
|
-S
|
指示编译器生成汇编源文件,但不汇编程序。
|
|
A.1.8 编译模式选项
表 30 编译模式选项
|
|
-#
|
启用详细模式,在该模式下将显示扩展命令选项的方式并像要调用一样显示每个组件。
|
-###
|
好像要进行调用一样显示每个组件,但不实际执行该组件。还显示命令选项扩展的过程。
|
-ansi
|
与 -std=c89 等效。
|
-features
|
启用或禁用各种 C 语言特性。
|
-keeptmp
|
保留编译过程中创建的临时文件而不自动删除这些文件。
|
-std
|
指定 C 语言标准。
|
-temp
|
为临时文件定义目录。
|
-V
|
指示 cc 打印每个组件的名称和版本 ID,就像编译器执行一样。
|
-W
|
将参数传递给 C 编译系统组件。
|
-X
|
-X 选项指定符合 ISO C 标准的各种级别。
|
-xc99
|
控制编译器识别支持的 C99 功能。
|
-xchar
|
保留字符符号
|
-xhelp
|
显示联机帮助信息。
|
-xjobs
|
设置编译器将创建的进程数。
|
-xlang
|
覆盖 -std 标志指定的缺省 libc 行为。
|
-xpch
|
减少应用程序的编译时间,该应用程序的源文件共享一组共同的 include 文件。
|
-xpchstop
|
可以与 -xpch 一起使用来指定活前缀的最后一个 include 文件。
|
-xtime
|
报告每个编译组件使用的时间和资源。
|
-Y
|
为 C 编译系统组件的位置指定新目录。
|
-YA
|
更改搜索组件的缺省目录。
|
-YI
|
更改搜索 include 文件的缺省目录。
|
-YP
|
更改查找库文件的缺省目录。
|
-YS
|
更改启动对象文件的缺省目录。
|
|
A.1.9 诊断选项
表 31 诊断选项
|
|
-errfmt
|
在错误消息前面加上字符串“error:”,以便与警告消息区别开来。
|
-errhdr
|
将来自头文件的警告限定到指定的组。
|
-erroff
|
禁止编译器警告消息。
|
-errshort
|
控制当编译器发现类型不匹配时生成的错误消息的详细程度。
|
-errtags
|
显示每条警告消息的消息标记。
|
-errwarn
|
如果发出指示的警告消息,cc 将以失败状态退出。
|
-pedantic
|
强制要求严格遵循非 ANSI 构造的错误/警告。
|
-v
|
指示编译器执行更严格的语义检查并启用其他类似 lint 的检查。
|
-w
|
禁止编译器警告消息。
|
-xanalyze
|
生成能使用代码分析器查看的源代码静态分析。
|
-xe
|
对源文件仅执行语法和语义检查,但不生成任何对象或可执行代码。
|
-xprevise
|
生成能使用代码分析器查看的源代码静态分析。
|
-xs
|
(Oracle Solaris) 将调试信息从对象文件链接到可执行文件。
|
-xtransition
|
对 K&R C 与 Oracle Developer Studio ISO C 之间的差别发出警告。
|
-xvpara
|
对于已指定了 #pragma MP 指令,但可能未针对并行化正确指定指令的循环发出警告。
|
|
A.1.10 调试选项
表 32 调试选项
|
|
-g
|
生成有关调试器的其他符号表信息。
|
-g3
|
生成其他调试信息。
|
-s
|
从输出对象文件中删除所有符号调试信息。
|
-xcheck
|
添加针对堆栈溢出的运行时检查并初始化局部变量。
|
-xdebugformat
|
生成 dwarf 格式而不是 stabs 格式的调试信息。
|
-xdebuginfo
|
控制发出多少调试和监测信息。
|
-xglobalize
|
控制文件静态变量的全局化,但是不控制函数的全局化。
|
-xkeep_unref
|
保留未引用函数和变量的定义。
|
-xpagesize
|
设置堆栈和堆的首选页面大小。
|
-xpagesize_stack
|
设置堆栈的首选页面大小。
|
-xpagesize_heap
|
设置堆的首选页面大小。
|
-xs
|
禁止自动读取 dbx 的对象文件。
|
-xvis
|
(SPARC) 使编译器可以识别 VIS 指令集中定义的汇编语言模板。
|
|
A.1.11 链接选项和库选项
表 33 链接选项和库选项表
|
|
-B
|
指定链接的库绑定是为 static 还是 dynamic。
|
-d
|
在链接编辑器中指定动态链接或静态链接。
|
-G
|
将选项传递给链接编辑器来生成共享对象而不是动态链接的可执行文件。
|
-h
|
按某种方式将名称赋给共享动态库以产生不同版本的库。
|
-i
|
将选项传递给链接程序以忽略任何 LD_LIBRARY_PATH 设置。
|
-L
|
将目录添加到链接程序搜索库的列表中。
|
-l
|
与对象库 libname .so 或 libname.a 链接。
|
-mc
|
从对象文件的 .comment 部分中删除重复字符串。
|
-mr
|
删除 .comment 部分中的所有字符串。也可以向对象文件的该部分中插入一个字符串。
|
-Q
|
确定是否将标识信息发送到输出文件。
|
-R
|
将用于指定库搜索目录的以逗号分隔的目录列表发送给运行时链接程序。
|
-staticlib
|
指定与 Sun 性能库的链接是静态的还是动态的。
|
-xMerge
|
将数据段合并到文本段。
|
-xcode
|
指定代码地址空间。
|
-xlang
|
覆盖 -std 标志指定的缺省 libc 行为。
|
-xldscope
|
控制变量和函数定义的缺省作用域,以创建更快更安全的共享库。
|
-xnolib
|
缺省情况下不链接任何库
|
-xnolibmil
|
不内联数学库例程。
|
-xpatchpadding
|
在各个函数启动之前保留内存区域。
|
-xsegment_align
|
使驱动程序在链接行上包括特殊映射文件。
|
-xstrconst
|
在以后的发行版中可能会废弃此选项。改用 –features=[no%]conststrings。
将文本字符串插入到文本段的只读部分而不是缺省数据段。
|
-xunboundsym
|
指定程序是否包含对动态绑定符号的引用。
|
|
A.1.12 目标平台选项
表 34 目标平台选项
|
|
-m32 |-m64
|
指定编译的二进制对象的数据类型模型。
|
-xarch
|
指定指令集体系结构。
|
-xcache
|
定义供优化器使用的高速缓存属性。
|
-xchip
|
指定供优化器使用的目标处理器。
|
-xregs
|
为生成的代码指定寄存器用法。
|
-xtarget
|
为指令集和优化指定目标系统。
|
|
A.1.13 x86 特定选项
表 35 x86 特定选项
|
|
-flteval
|
控制浮点求值。
|
-fprecision
|
初始化浮点控制字中的舍入精度模式位
|
-fstore
|
使编译器将浮点表达式或函数的值转换为赋值左侧的类型
|
-nofstore
|
不将浮点表达式或函数的值转换为赋值左侧的类型
|
-preserve_argvalues
|
(x86) 在堆栈中保存基于寄存器的函数参数的副本。
|
-xmodel
|
针对 Oracle Solaris x86 平台修改 64 位对象形式
|
|
A.1.14 已过时选项
下表列出了已过时的选项。请注意,编译器仍可接受这些选项,但在以后的版本中可能不接受这些选项。所以,请尽快开始使用建议的替代选项。
表 36 已过时选项表
|
|
-dalign
|
改用 -xmemalign=8s。
|
-KPIC (SPARC)
|
改用 -xcode=pic32。
|
-Kpic (SPARC)
|
改用 -xcode=pic13。
|
-misalign
|
改用 -xmemalign=1i。
|
-misalign2
|
改用 -xmemalign=2i。
|
-x386
|
改用 -xchip=generic。
|
-x486
|
改用 -xchip=generic。
|
-xa
|
改用 -xprofile=tcov。
|
-xanalyze
|
生成能使用代码分析器查看的源代码静态分析。
|
-xarch=v7,v8,v8a
|
已过时。
|
-xcg
|
改用 -O,以利用 -xarch、-xchip 和 -xcache 的缺省值。
|
–-xcrossfile
|
已过时。改用 –xipo。
|
-xlicinfo
|
已过时;没有替代选项。
|
-xnativeconnect
|
已过时,没有替代选项。
|
-xprefetch=yes
|
改用 -xprefetch=auto,explicit。
|
-xprefetch=no
|
改用 -xprefetch=no%auto,no%explicit。
|
-xsb
|
已过时,没有替代选项。
|
–xsbfast
|
已过时,没有替代选项。
|
-xtarget=386
|
改用 -xtarget=generic。
|
-xtarget=486
|
改用 -xtarget=generic。
|
–xvector=yes
|
改用 –xvector=lib。
|
–xvector=no
|
改用 –xvector=none。
|
|