优化资源共享

icansaymyabc 2007-01-13 09:49:00
Intel® C++ 编译器 帮助
==========================

用法:icl [选项] 文件1 [文件2 …] [/link 链接器选项]

其中options代表零个或多个编译选项;fileN 是C/C++源程序(.c .cc .cpp .cxx .i),汇编(.asm),目标文件(.obj),静态链接库(.lib),或其他可链接的文件;linker_options代表零个或多个链接选项

注意
-----
1. 支持大多数Microsoft® Visual C++™ 编译器选项;对于不支持的多数选项会显示警告。各种选项的精确行为与Microsoft Visual C++ 编译器的同样选项并不完全一致。
2.
Intel C++ 编译器选项可以放置在你的icl.cfg文件中。
3. Intel C++ 编译器多数特殊选项以 /Q 开始:
(*I) 表明其选项是Intel C++ 编译器所独有的
(*M) 指出该选项被Microsoft Visual C++ 编译器支持

编译器选项列表
--------------------
性能选项
-----------
/O1 最大化速度,但是会禁用一些以增加代码尺寸获得极小速度提升的选项:/Ob2gysi-
/O2 最大化速度(缺省):/Ob2gyti
/O3 最大化速度并且启用高级优化
/Ox 启用完全优化
/Od 禁用优化;常用于选择性优化(例如 /Od /Og)

/fast 等同于/QxP /O3 /Qipo /Qprec-div-
/Ob<n> 控制内联扩展:
n=0 禁用内联扩展
n=1 扩展申明为 __inline 的函数, 完成 C++ 的内联任务
  n=2 由编译器来决定,可以扩展任何函数 (如同 /Qip)

/Og 启用全局优化
/Oi[-] 启用[禁止]扩展内联函数
/Op[-] 启用[禁止]更好的浮点精度
/Os 启用速度优化,但是禁用一些以增加代码尺寸获得极小速度提升的选项(覆盖/Ot)
/Ot 启用速度优化(覆盖/Os)
/Oy[-] 启用[禁止]使用EBP作为通用目标寄存器(无框架指针)
/Oa[-] 假定程序中无别名
/Ow[-] 假定函数内无别名,但是假定有别名调用

/Qax<codes> 为<codes>所指定的处理器生成代码,同时也生成通用 IA-32 代码。
<codes> 包括一个或多个下面的字符:
K Intel Pentium III 和兼容的 Intel 处理器
W Intel Pentium 4 和兼容的 Intel 处理器
N Intel Pentium 4和兼容的 Intel 处理器。并启用 Intel处理器特有的新优化方法
P Intel Core™ Duo 处理器, Intel Core™ Solo 处理器,
Intel Pentium 4 和兼容的 Intel 处理器有SSE3 指令支持
B Intel Pentium M 和兼容的 Intel 处理器
/Qx<codes> 生成只能在<codes>指定处理器上运行的代码.
/arch:{SSE|SSE2}
分别等同于 /QxK 和 /QxW

/GR[-] 启用[禁用] C++ RTTI
/Qcxx-features
启用标准 C++ 特性(-GX -GR)
/EHa 启用异步C++ 异常句柄模型
/EHs 启用同步 C++ 异常句柄模型
/Ehc 假定 extern "C" 函数不会抛出异常
/Qsafeseh[-]
安全的寄存器异常操作 (/Qvc7.1及以上版本里是缺省值)

/Gd 使用 __cdecl 作为缺省调用约定
/Gr 使用 __fastcall 作为缺省调用约定
/Gz 使用 __stdcall 作为缺省调用约定

/GF 启用只读字符串池优化
/GA 为Windows应用程序优化(假定 .exe)
/GS[-] 启用[禁用(缺省)]溢出检查
/GT 启用纤尘安全的线程局部存储

高级性能选项
--------------------
启用并指定下列范围内的交互过程 (IP)优化选项:
/Qip 启用单文件IP优化(在一个文件内部,如同/Ob2)
/Qipo[n] 启用多文件IP优化(在文件之间)
/Qipo-c 生成一个多文件目标文件(ipo_out.obj)
/Qiop-S 生成一个多文件汇编文件

修改IP的行为:
/Qip-no-inlining 禁止全部或部分内联(需要 /Qio 或 /Qipo)
/Qip-no-ponlining 禁止部分内联(需要 /Qio 或 /Qipo)
/Qipo-separate 每一个源文件创建一个目标程序(覆盖 /Qipo[n])

其他高级性能选项:
/Qunroll[n] 设置打开循环的最大次数。省略n使用缺省启发式分析结果。
使用n=0禁止打开循环
/Qprof-dir <d> 指定存放输出profiling文件(*.dyn 和 *.dpi)的目录
        { profiling 一般是指对程序做性能测试 }
/Qprok-file <f> 指定profiling概要文件的文件名
/Qprof-gen[x] profiling的工具程序;用x进行限制,为PROFORDER工具采集额外的信息
/Qprof-use 指示在优化期间使用profiling信息
/Qfnsplit[-] 启用[禁止]函数分裂(同 /Qprof-use 一起启用)
/Qprof-gen-sampling
为同profrun样本采集工具一起使用准备代码

/Qpc32 设置内部 FPU 精度为24 bit 有符号数
/Qpc64 设置内部 FPU 精度为53 bit 有符号数(缺省)
/Qpc80 设置内部 FPU 精度为64 bit 有符号数
/QIfist[-] 启用[禁用(缺省)]快速浮点到整数转换
/Qrce 等同于/QIfist
/Qprec 改善浮点精度(速度影响小于 /Op)
/Qprec-div[-]
执行FP除法时改善精度(对速度有一些影响)
/Qprec-sqrt[-]
确定平方根优化是否启用
/Qfp-port[-]
按照指示舍入浮点结果(对速度有一些影响)
/Qfpstkchk 启用每次函数调用后均检查浮点栈
/Qsfalign8 函数变量在栈上按8或16字节对齐(缺省)
/Qsfalign16 函数变量在栈上按16字节对齐
/Qsfalign 强迫所有函数栈对齐
/Qsfalign- 取消所有函数栈对齐
/Gh 在函数引导处调用 __penter;用户profiling时常用
/GH 在函数结尾处调用__pexit;用户profiling时常用

/Qscalar-rep[-] 启用(缺省)[禁用] 纯量替换(要求 /O3)
/Qvec-report[n] 控制矢量化诊断信息的数量:
n=0 没有诊断信息
n=1 标示矢量化的循环 (缺省)
n=2 标示矢量化和未矢量化的循环
n=3 标示矢量化和未矢量化的循环妨碍数据的依存信息
n=4 标示未矢量化的循环
n=5 标示未矢量化的循环和妨碍数据的依存信息

/Qopt-report 输出优化报告到 stderr
/Qopt-report-file<file> 指定保存优化报告的文件名
/Qopt-report-level[level] 指定优化报告的详细程度(min|med|max)
/Qopt-report-phase<name> 指定要生成报告的阶段
/Qopt-report-routine<name> 在包含在指定name中的程序上报告
/Qopt-report-help 显示可用于报告的优化阶段

/Qtcheck 为检测多线程BUG而生成测试器
(要求Intel(R) Thread Checker,不可在编译器上单独使用)
/Qtprofile 为分析多线程性能而生成测试器
(要求Intel(R) Thread Profiler,不可在编译器上单独使用)
/Qopenmp 允许编译器产生基于OpenMP指示的多线程编码
/Qopenmp-profile 使用OpenMP运行库制导的链接,以产生OpenMP 性能测试信息
供VTune(TM) Performance Analyzer 的OpenMP调试组件运用
/Qopenmp-stubs 允许用户编译串行的OpenMP程序。
OpenMP指示被忽略并且链接一个简短的OpenMP库。
/Qopenmp-report{0|1|2} 控制OpenMP并行器的诊断级别
/Qparallel 允许自动并行器安全地将循环多线程化
/Qpar-report{0|1|2|3} 控制自动并行器诊断级别
/Qpar-threshold[n] 设置将循环自动并行化阀值。N是整数取值0到100
/Qalias-args[-] 启用(缺省)[禁止] 关于C/C++函数可以有别名的规则
如果禁用此规则,其安全性由用户保证。
/Qansi-alias[-] 启用[禁止(缺省)]在优化当中使用ANSI别名规则;
用户保证程序遵循了这些规则

/Qcomplex-limited-range[-]
启用[禁止(缺省)]对于某些复数运算使用基本代数展开。
对于复数计算密集型程序启用会丢失一些精度换取性能改善
/Qssp enable software-based speculative pre-computation
/Qssp 启用基于软件的推测式预计算

/fp:<name> 启用 <name> 浮点模型变量:
except[-] - 启用[取消]浮点语义学
double - 舍入中间变量至 53-bit (double) 精度
extended - 舍入中间变量至 64-bit (extended) 精度
fast[=1|2] - 启用更野蛮的浮点优化
precise - 允许值安全的优化
source - 启用中间变量适用源精度
strict - 启用 -fp:precise -fp:except, disables
禁用收缩,启用 pragma stdc fenv_access

/Qinline-min-size=<n>
设置内联程序的尺寸下限{小于此下限的程序要内联}
/Qinline-min-size-
内联程序尺寸没有下限
/Qinline-max-size=<n>
设置内联程序尺寸上限{大于此限制的程序不内联}
/Qinline-max-size-
内联程序没有尺寸上制
/Qinline-max-total-size=<n>
全部内联扩展的函数的最大尺寸
/Qinline-max-total-size-
全部内联扩展的函数的最大尺寸无限制
/Qinline-max-per-routine=<n>
一个内联函数能扩展的最大尺寸
/Qinline-max-per-routine-
一个内联函数能扩展的最大尺寸无限制
/Qinline-max-per-compile=<n>
每一次编译中内联函数的最大扩展次数
/Qinline-max-per-compile-
每一次编译中内联函数的最大扩展次数无限制
/Qinline-factor=<n>
设定内联扩展的上限,以百分比表示
/Qinline-factor-
没有设定内联扩展的上限
/Qinline-forceinline
将inline函数强制内联
...全文
922 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赖勇浩 2007-01-13
  • 打赏
  • 举报
回复
谢谢
icansaymyabc 2007-01-13
  • 打赏
  • 举报
回复
本想搞中英文对照的,但是CSND限制长度,连纯中文的都要分两贴发。
看英文帮助请用 icl /help
icansaymyabc 2007-01-13
  • 打赏
  • 举报
回复
自个儿翻译的,翻的不好,难免有错,欢迎批评指正。
icansaymyabc 2007-01-13
  • 打赏
  • 举报
回复


输出,调试,预编译
------------------
/c 仅编译,产生目标文件(.obj),不链接
/S 仅编译,产生汇编文件(.asm),不链接
/FA[cs] 产生汇编文件,可以选择机器码或源文件作为注释
/Fa[file] 命名汇编文件(或目录给多个文件;如/FaMYDIR\)
/Fo[file] 命名目标文件(或目录给多个文件;如/FoMYDIR2\)
/Fe<file> 命名可执行文件或目录
/Fp[file] 命名预编译头文件
/Yc[hfile] 创建预编译头文件
/Yu[hfile] 使用预编译头文件
/YX 启用自动预编译头文件创建/使用
/Y- 忽略所有其它预编译头文件选项
/Qpchi[-] 启用(缺省)[禁用] PCH 共存,以减少生成时间
/FD 生成文件依存
/FR[file] 命名扩展的源文件浏览器
/Quse-asm[-] 启用[禁止(缺省)]使用汇编程序产生目标代码
/RTC1 等价于 /RTCsu
/RTCs 启用运行时栈框架检查
/RTCu 报告使用了未初始化的变量
/RTCc 启用转换到较小类型的类型转换检查
/Zi, /Z7 在目标文件中生成符号调试信息
/ZI 等同于 /Zi
/Qinline-debug-info 对于内联程序采用保护源代码位置代替取消内联
/debug[:keyword]
启用调试信息并控制输出增强的调试信息。
keywords: all, full, minimal, none, inline-debug-info,
variable-locations, semantic-stepping, extended,
[no]expr-source-pos
/Qtrapuv 捕捉未初始化变量
/Qmap-opts 允许选择映像工具


预处理程序
------------
/C 不要抛弃注释
/D<name>[{=|#}<text>] 定义宏
/QA<name>[(val)] 创建一个'name' 具有 'val' 的断言
/QA[-] 移去所有预定义宏
/E 预处理输出到 stdout
/EP 预处理输出到stdout, 忽略 #line 指示
/EP /P 预处理输出到文件, 忽略 #line 指示
/P 预处理输出到文件
/FI<file> 强制包含文件
/I<dir> 增加目录到包含文件搜索路径
/QH 打印包含文件的顺序
/QM 产生makefile包括依赖项,不编译
/QMM 类似 /QM, 但不包含系统头文件
/QMG 类似 /QM, 但将缺失的头文件视为已编译文件
/QMD 预处理并编译,生成的输出文件包含依赖信息,扩展名 .d

/QMMD 类似 /QMD, 但不包含系统头文件
/QMF<file> 在file中生成 makefile 依赖信息 (必须指定 /QM或 /QMM)
/QMT<target> 为依赖生成器改变缺省的目标规则
/QdM 与处理后输出宏定义 (与 –E 一起使用)
/QdD 类似 /QdM, 但是在与处理后文件里输出 #define 指示
/QdN 类似 /QdD, 但是#define 指示里仅包含宏名
/U<name> 移除name宏定义
/u 移除所有的预定义宏
/X 从包含文件搜索路径里移除标准目录


元件控制
-----------------
/Qoption,<str>,<opts> 传递选项 <opts> 给 <str> 指定的工具
/Qlocation,<str>,<dir> 设置 <dir> 作为 <str> 指定工具的缺省目录


语言
--------
/J 改变缺省 char 类型为无符号型
/noBool 禁用 'bool' 关键字
/Qc99[-] 启用[禁用(缺省)] C99 支持为C语言程序
/Qms[n] 允许汇编一些可疑的源程序
n=0 禁用 Microsoft 兼容性漏洞
n=1 启用多数 Microsoft 兼容性 (缺省)
n=2 完全的 Microsoft 兼容
/Qmspp[-] 启用(缺省)[禁用] Microsoft Visual C++ 6.0 程序包二进制兼容

/Qvc6 启用 Visual C++ 6.0 兼容 (缺省)
/Qvc7 启用 Visual Studio .NET 2002兼容
/Qvc7.1 启用 Visual Studio .NET 2003兼容
/Qvc8 启用 Visual Studio 2005兼容
/Qrestrict[-] 启用[禁用] 'restrict' 关键字以消除指针歧义
-Qtemplate-depth<n>
控制递归模板展开的深度
/Za 禁用 Microsoft Visual C++ 编译器语言扩展
/Zg 启用函数原型生成
/Zp[n] 指定结构对齐 (n=1,2,4,8,16;/Zp16 缺省)
/Zs 仅仅检查员程序语法,不编译
/Zc:arg1[,arg2] 指定下列参数的标准的一致:
forScope[-] 强制for循环初始化的标准行为
wchar_t[-] 强制 wchar_t 是一个内部数据类型

/vd{0|1} 禁止或允许在 C++ 对象中隐含的 vtordisp域
/vm<x> 指明表示 C++ 指向成员的指针的方法

编译器的诊断程序
--------------------
/w 取消所有警告
/W0 仅打印错误
/W1, /W2, /W3 仅打印错误和警告(缺省)
/W4, /Wall 打印错误、警告、注意
/WL 打印一行诊断概要
/WX 强行把警告报告为错误
/Wcheck 执行更严格的诊断
/Wp64 打印 64位移植诊断
/Wport 可移植性问题诊断
/Qwn<n> 最多打印n个错误
/Qwd<L1>[,<L2>,...] 禁止诊断 L1 到 LN
/Qwe<L1>[,<L2>,...] 将诊断L1 到 LN的严格度改变为错误
/Qcontext-limit<n>
设置诊断中显示的模板实例化上下文最大数量

/Qww<L1>[,<L2>,...] 将诊断L1 到 LN的严格度改变为警告
/Qwr<L1>[,<L2>,...] 将诊断L1 到 LN的严格度改变为提示


杂项
-------------
/?, /help 打印帮助信息
/nologo 不显示编译器版本信息
/Tc<file> 将file作为C源程序编译
/Tp<file> 将file作为 C++ 源程序编译
/TC 将所有未知类型的文件作为C源程序编译
/TP 将所有未知类型的文件作为C++源程序编译
/Qsox[-] 启用[禁止(缺省)] 在可执行程序中保存编译选项和版本
/Qlong-double 启用 80-bit 'long double'
/Qnobss-init 禁止放置用零初始化的变量在BSS中(使用 DATA)
/Qglobal-hoist[-]
启用(缺省)[禁止] 为安全加载外部全局变量
/showIncludes 显示包含文件名称
/Qmultibyte-chars[-]
提供多字节字符的支持

链接/链接器
--------------
/link 指示随后的全部选项传递给链接器
/F<n> 给链接器设置保留栈的总数
/LD, /LDd 生成 DLL 而不是 EXE ('d' = debug 版本)
/MD, /MDd 使用动态加载多线程C 运行库
/ML, /MLd 使用静态加载单线程C 运行库 (/ML 是缺省)
/MT, /MTd 使用静态加载多线程C 运行库
/Zl 从目标文件中删除库名

版权所有© 1985-2006, Intel 公司。保留一切权利。
* 其它的品牌和名称属于它们各自的拥有者。

568

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧