3.4 按功能汇总的选项
在本节中,编译器选项按功能分组以便提供快速参考。有关各个选项的详细说明,请参阅C++ 编译器选项。
除非特别注明,否则这些选项适用于所有平台;基于 SPARC 的系统上的 Oracle Solaris OS 特有的功能标识为 (SPARC),基于 x86 的系统上的 Oracle Solaris OS 特有的功能标识为 (x86)。
3.4.1 代码生成选项
表 4 代码生成选项
|
|
-compat
|
设置编译器的兼容模式。
|
-g
|
编译以便用于调试器。
|
-KPIC
|
生成与位置无关的代码。
|
-Kpic
|
生成与位置无关的代码。
|
-mt
|
编译和链接多线程代码。
|
-xaddr32
|
将代码限定于 32 位地址空间 (x86/x64)。
|
-xarch
|
指定目标体系结构。
|
-xcode=a
|
(SPARC) 指定代码地址空间。
|
-xlinker
|
指定链接程序选项。
|
-xMerge
|
(SPARC) 将数据段和文本段合并。
|
-xtarget
|
指定目标系统。
|
-xmodel
|
针对 x86 平台修改 64 位对象的形式
|
+w
|
标识可能产生不可预料结果的代码。
|
+w2
|
发出由 +w 发出的所有警告以及关于技术违规的警告,这些技术违规可能是无害的,但可能会降低程序的最大可移植性。
|
-xregs
|
如果编译器可以使用更多的寄存器用于临时存储(临时寄存器),那么编译器将能生成速度更快的代码。该选项使得附加临时寄存器可用,而这些附加寄存器通常是不适用的。
|
-xsegment_align
|
使驱动程序在链接行上包括特殊映射文件。
|
-z arg
|
链接程序选项。
|
|
3.4.2 编译时性能选项
表 5 编译时性能选项
|
|
-instlib
|
禁止生成已出现在指定库中的模板实例。
|
-m32|-m64
|
指定编译的二进制对象的数据类型模型。
|
-xinstrument
|
编译并检测程序,以供线程分析器进行分析。
|
-xjobs
|
设置编译器可以为完成工作而创建的进程数量。
|
-xpch
|
可以减少应用程序的编译时间,这些应用程序的源文件共享一组通用的 include 文件。
|
-xpchstop
|
指定在使用 -xpch 选项创建预编译头文件时要考虑的最后一个 include 文件。
|
-xprofile_ircache
|
(SPARC) 重新使用在执行 -xprofile=collect 期间保存的编译数据。
|
-xprofile_pathmap
|
(SPARC) 支持单个分析目录中有多个程序或共享库。
|
|
3.4.3 编译时选项和链接时选项
下表列出了在链接时和编译时均必须指定的选项。
表 6 编译时选项和链接时选项
|
|
–fast
|
选择用于控制可执行代码速度的编译选项的最优组合。
|
-fopenmp
|
与 -xopenmp=parallel 等效。
|
–m32|–m64
|
指定编译的二进制对象的数据类型模型。
|
–mt
|
扩展为 –D_REENTRANT –lthread 的宏选项。
|
-std
|
指定 C++ 语言版本和兼容性模式。
|
–xarch
|
指定指令集体系结构。
|
–xautopar
|
为多个处理器启用自动并行化。
|
–xhwcprof
|
为基于硬件计数器的分析启用编译器支持。
|
–xipo
|
通过调用过程间分析组件来执行整个程序优化。
|
-xipo_build
|
通过避免在初始传递期间通过编译器进行优化(仅在链接时优化)而缩短编译时间。
|
-xlinker
|
指定链接程序选项。
|
–xlinkopt
|
对可重定位对象文件执行链接时优化。
|
–xmemalign
|
(SPARC) 指定假定的最大内存对齐以及未对齐的数据访问的行为。
|
–xopenmp
|
支持用于显式并行化的 OpenMP 接口,包括一组源代码指令、运行时库例程和环境变量。
|
–xpagesize
|
设置堆栈和堆的首选页面大小。
|
–xpagesize_heap
|
设置堆的首选页面大小。
|
–xpagesize_stack
|
设置堆栈的首选页面大小。
|
-xpatchpadding
|
在各个函数启动之前保留内存区域。
|
–xpg
|
准备对象代码来收集数据以使用 gprof(1) 进行分析。
|
–xprofile
|
收集用于分析的数据或使用分析进行优化。
|
-xs
|
(Solaris) 将调试信息从对象文件链接到可执行文件。
|
–xvector=lib
|
启用对向量库函数调用的自动生成。
|
|
3.4.4 调试选项
表 7 调试选项
|
|
-###
|
与 -dryrun 等效。
|
+d
|
不扩展 C++ 内联函数。
|
-dryrun
|
显示驱动程序将向编译的所有组件发出的所有命令。
|
-E
|
仅对 C++ 源文件运行预处理程序,并将结果发送到 stdout。不编译。
|
-g
|
编译以便用于调试器。
|
-g0
|
编译以便进行调试,但不禁用内联。
|
-H
|
打印包含文件的路径名称。
|
-keeptmp
|
保留编译时创建的临时文件。
|
-P
|
仅预处理源文件,输出到 .i 文件。
|
-preserve_argvalues
|
(x86) 在堆栈中保存基于寄存器的函数参数的副本。
|
-Qoption
|
直接将选项传递到编译阶段。
|
-s
|
从可执行文件中去掉符号表,这样可以保护调试代码的能力。
|
-temp
|
为临时文件定义目录。
|
-verbose
|
控制编译器详细级别。
|
-xanalyze
|
生成能使用代码分析器查看的源代码静态分析。
|
-xcheck
|
对堆栈溢出增加一个运行时检查。
|
-xdebuginfo
|
编译以便用于调试器,指定发出多少调试详细信息。
|
-xdumpmacros
|
打印诸如定义、定义及未定义的位置和已使用的位置的宏信息。
|
-xe
|
仅检查语法和语义错误。
|
-xglobalize
|
控制文件静态变量的全局化,但是不控制函数的全局化。
|
-xhelp=flags
|
显示编译器选项汇总列表。
|
-xkeep_unref
|
保留未引用函数和变量的定义。
|
-xpatchpadding
|
在各个函数启动之前保留内存区域。
|
-xprevise
|
生成能使用代码分析器查看的源代码静态分析。
|
-xport64
|
对 32 位体系结构到 64 位体系结构的移植过程中的常见问题发出警告。
|
-xs
|
(Solaris) 将调试信息从对象文件链接到可执行文件。
|
|
3.4.5 浮点选项
表 8 浮点选项
|
|
-fma
|
启用自动生成浮点混合乘加指令。
|
-fns[={no|yes}]
|
(SPARC) 禁用或启用 SPARC 非标准浮点模式。
|
-fprecision=p
|
x86: 设置浮点精度模式。
|
-fround=r
|
设置启动时生效的 IEEE 舍入模式。
|
-fsimple=n
|
设置浮点优化首选项。
|
-fstore
|
x86: 强制浮点表达式的精度。
|
-ftrap=tlst
|
设置启动时生效的 IEEE 陷阱操作模式。
|
-nofstore
|
x86: 禁用表达式的强制精度。
|
-xlibmieee
|
使 libm 在异常情况下对于数学例程返回 IEEE 754 值。
|
|
3.4.6 语言选项
表 9 语言选项
|
|
-compat
|
设置编译器的主发行版本兼容模式。
|
-features=alst
|
启用或禁用各种 C++ 语言特性。
|
-std
|
指定 C++ 语言版本。
|
-xchar
|
在 char 类型定义为无符号的系统上,简化代码的移植。
|
-xldscope
|
控制变量和函数定义的缺省链接程序范围,以创建更快更安全的共享库。
|
-xthreadvar
|
(SPARC) 更改缺省的线程局部存储访问模式。
|
-xtrigraphs
|
启用三字母序列的识别。
|
-xustr
|
启用识别由 16 位字符构成的文本字符串。
|
|
3.4.7 库选项
表 10 库选项
|
|
-Bbinding
|
请求符号、动态或静态库链接。
|
-d{y|n}
|
允许或不允许整个可执行文件的动态库。
|
-G
|
生成动态共享库来取代可执行文件。
|
-hname
|
为生成的动态共享库指定内部名称。
|
-i
|
通知 ld(1) 忽略任何 LD_LIBRARY_PATH 设置。
|
-Ldir
|
将 dir 添加到要在其中搜索库的目录列表。
|
-llib
|
将 liblib.a 或 liblib.so 添加到链接程序的库搜索库列表。
|
-library=llst
|
强制将特定库和相关文件包含到编译和链接中。
|
-mt
|
编译和链接多线程代码。
|
-norunpath
|
不将库的路径生成到可执行文件中。
|
-Rplst
|
将动态库搜索路径生成到可执行文件中。
|
-staticlib=llst
|
说明哪些 C++ 库是静态链接的。
|
-xar
|
创建归档库。
|
-xbuiltin[=opt]
|
启用或禁用标准库调用的更多优化。
|
-xia
|
(Solaris) 链接合适的区间运算库并设置适当的浮点环境。
|
-xlang=l[,l]
|
包含适当的运行库,并确保指定语言的正确运行时环境。
|
-xlibmieee
|
使 libm 在异常情况下对于数学例程返回 IEEE 754 值。
|
-xlibmil
|
内联选定的 libm 库例程以进行优化。
|
-xlibmopt
|
使用优化数学例程的库。
|
-xnolib
|
禁止链接缺省系统库。
|
-xnolibmil
|
在命令行上取消 – xlibmil。
|
-xnolibmopt
|
不使用数学例程库。
|
|
3.4.8 已过时选项
注 -
以下选项当前已过时(因此编译器不再接受它们)或者在以后的发行版中可能会被删除。
表 11 已过时选项
|
|
-features=[%all|%none]
|
过时的子选项 %all 和 %none。
|
-library=%all
|
过时的子选项,在以后的发行版本中可能会被删除。
|
-migration
|
不再识别该选项。
|
-xanalyze
|
已过时,请改用 -previse。
|
-xarch=v7,v8,v8a
|
已过时。
|
-xlic_lib=sunperf
|
使用 —library=sunperf 可链接到 Sun 性能库。
|
-xlicinfo
|
已废弃。
|
-xnativeconnect
|
已废弃,没有替代选项。
|
-xprefetch=yes
|
改用 -xprefetch=auto,explicit。
|
-xprefetch=no
|
改用 -xprefetch=no%auto,no%explicit。
|
–xvector=yes
|
改用 –xvector=lib。
|
–xvector=no
|
改用 –xvector=none。
|
|
3.4.9 输出选项
表 12 输出选项
|
|
-c
|
仅编译;生成对象 (.o) 文件,但抑制链接。
|
-dryrun
|
显示由驱动程序发出的所有命令行,但不运行任何命令行。
|
-E
|
仅对 C++ 源文件运行预处理程序,并将结果发送到 stdout。不编译。
|
-erroff
|
禁止编译器警告消息。
|
-errtags
|
显示每条警告消息的消息标记。
|
-errwarn
|
如果发出指示的警告消息,编译器将以失败状态退出。
|
-filt
|
禁止编译器应用到链接程序错误消息的过滤。
|
–G
|
生成动态共享库来取代可执行文件。
|
–H
|
打印被包含文件的路径名称。
|
–o filename
|
将输出文件或可执行文件的名称设置为 filename。
|
–P
|
仅预处理源文件,输出到 .i 文件。
|
–Qproduce sourcetype
|
使 CC 驱动程序生成类型为 sourcetype 的输出。
|
–s
|
从可执行文件去掉符号表。
|
–verbose=vlst
|
控制编译器详细级别。
|
+w
|
必要时打印附加警告。
|
+w2
|
适当时仍打印更多警告。
|
–w
|
抑制警告消息。
|
-xdumpmacros
|
打印诸如定义、定义及未定义的位置和已使用的位置的宏信息。
|
-xe
|
仅对源文件执行语法和语义检查,但不生成任何对象或可执行代码。
|
–xhelp=flags
|
显示编译器选项汇总列表。
|
–xM
|
输出 makefile 依赖性信息。
|
–xM1
|
生成依赖性信息,但排除 /usr/include。
|
–xtime
|
报告每个编译阶段的执行时间。
|
–xwe
|
将所有的警告转换为错误。
|
-z arg
|
链接程序选项。
|
|
3.4.10 运行时性能选项
表 13 运行时性能选项
|
|
–fast
|
选择编译选项的组合以优化某些程序的执行速度。
|
-fma
|
启用自动生成浮点混合乘加指令。
|
-g
|
指示编译器和链接程序准备程序以进行性能分析(以及调试)。
|
-s
|
从可执行文件去掉符号表。
|
-m32|-m64
|
指定编译的二进制对象的数据类型模型。
|
-xalias_level
|
启用编译器执行基于类型的别名分析和优化。
|
-xarch=isa
|
指定目标体系结构指令集。
|
-xbinopt
|
准备二进制文件以便以后进行优化、转换和分析。
|
-xbuiltin[=opt]
|
启用或禁用标准库调用的更多优化。
|
-xcache=c
|
(SPARC) 定义优化器的目标高速缓存属性。
|
-xchip=c
|
指定目标处理器芯片。
|
-xdebuginfo
|
指示编译器和链接程序准备程序以进行性能分析(以及调试)。
|
-xF
|
启用函数和变量的链接程序重新排序。
|
-xinline=flst
|
指定用户编写的哪些例程可以被优化器内联。
|
-xinline_param
|
手动更改编译器用来确定何时内联函数调用的试探式方法。
|
-xinline_report
|
生成在编译器内联函数时写入标准输出的报告。
|
-xipo
|
执行过程间优化。
|
-xipo_build
|
通过避免在初始传递期间通过编译器进行优化(仅在链接时优化)而缩短编译时间。
|
-xlibmil
|
内联选定的 libm 库例程以进行优化。
|
-xlibmopt
|
使用优化数学例程的库。
|
-xlinkopt
|
除了对象文件中的所有优化之外,对生成的可执行文件或动态库执行链接时优化。
|
-xmemalign=ab
|
(SPARC) 指定假定的最大内存对齐以及未对齐的数据访问的行为。
|
-xnolibmil
|
在命令行上取消 – xlibmil。
|
-xnolibmopt
|
不使用数学例程库。
|
-xOlevel
|
将优化级别指定为 level。
|
-xpagesize
|
设置堆栈和堆的首选页面大小。
|
-xpagesize_heap
|
设置堆的首选页面大小。
|
-xpagesize_stack
|
设置堆栈的首选页面大小。
|
-xprefetch[=lst]
|
在支持预取的体系结构上启用预取指令。
|
-xprefetch_level
|
控制 -xprefetch=auto 设置的自动插入预取指令的主动性。
|
-xprofile
|
收集运行时分析数据或使用运行时分析数据进行优化。
|
-xregs=rlst
|
控制临时寄存器的使用。
|
-xsafe=mem
|
(SPARC) 不允许有基于内存的陷阱。
|
-xsegment_align
|
使驱动程序在链接行上包括特殊映射文件。
|
-xspace
|
(SPARC) 不允许会增大代码大小的优化。
|
-xtarget=t
|
指定目标指令集和优化系统。
|
-xthreadvar
|
更改缺省的线程局部存储访问模式。
|
-xthroughput
|
指定当多个进程同时在系统上运行时运行应用程序。
|
-xunboundsym
|
指定程序是否包含对动态绑定符号的引用。
|
-xunroll=n
|
启用在可能的场合下解开循环。
|
-xvis
|
(SPARC) 使编译器可以识别 VIS 指令集中定义的汇编语言模板。
|
|
3.4.11 预处理程序选项
表 14 预处理程序选项
|
|
-Dname[=def]
|
为预处理程序定义符号 name。
|
-E
|
仅对 C++ 源文件运行预处理程序,并将结果发送到 stdout。包括有关预处理行的源文件的信息。不编译。
|
-H
|
打印被包含文件的路径名称。
|
-P
|
仅预处理源文件,输出到 .i 文件。
|
-Uname
|
删除预处理程序符号 name 的初始定义。
|
-xM
|
输出 makefile 依赖性信息。
|
-xM1
|
生成依赖性信息,但排除 /usr/include。
|
|
3.4.12 分析选项
表 15 分析选项
|
|
-p
|
准备对象代码来收集数据以使用 prof 进行分析。
|
-xpg
|
编译以便使用 gprof 分析器进行分析。
|
-xprofile
|
收集运行时分析数据或使用运行时分析数据进行优化。
|
|
3.4.13 引用选项
表 16 引用选项
|
|
-xhelp=flags
|
显示编译器选项汇总列表。
|
|
3.4.14 来源选项
表 17 来源选项
|
|
-H
|
打印被包含文件的路径名称。
|
-Ipathname
|
将 pathname 添加到 include 文件搜索路径。
|
-I-
|
更改包含文件搜索规则
|
-xM
|
输出 makefile 依赖性信息。
|
-xM1
|
生成依赖性信息,但排除 /usr/include。
|
|
3.4.15 模板选项
表 18 模板选项
|
|
-instances=a
|
控制模板实例的放置和链接。
|
-template=wlst
|
启用或禁用各种模板选项。
|
|
3.4.16 线程选项
表 19 线程选项
|
|
-mt
|
编译和链接多线程代码。
|
-xsafe=mem
|
(SPARC) 不允许有基于内存的陷阱。
|
-xthreadvar
|
(SPARC) 更改缺省的线程局部存储访问模式。
|
|