MSVC编译参数

本文详细介绍了MSVC编译器的命令行编译链接命令cl.exe,包括cl命令的格式、各种选项的用途,如优化参数、产生代码、输出文件、预处理、语言、链接、预编译头和杂项等。同时,还提供了详细的参数说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

msvc的命令行编译链接命令cl.exe

cl命令格式
CL [option…] file… [option | file]… [lib…] [@command-file] [/link link-opt…]

选项    用途
option    参数可以使用/或者-,具体含义可以使用/HELP option看到解释。
file    一个或者多个源文件,.obj文件或者。lib文件,CL编译源文件传递.obj和.lib给linker
lib    一个或多个库文件,cl将传送给linker
command-file    一个保存多个选项的文件
link-opt    一个或多个链接操作,cl将传递给linker
cl用到的环境变量
变量    
INCLUDE    指定vc的头文件位置,windows sdk的头文件位置。等等,中间用;分割。
LIB    指定vc的库,windows sdk的库路径。中间用;分割。
优化参数
选项    用途
/O1    目标尺寸最小
/O2    目标速度最快
/Ob    控制inline扩展,/Ob{0/1/2}
/Od    关闭优化
/Og    使用全局优化
/Oi    产生固定函数
/Os    偏向尺寸优化
/Ot    偏向速度优化
/Ox    最佳优化
/Oy    忽略帧指针(仅x86)
/favor    对特定架构优化。/favor:{blend/ATOM/AMD64/INTEL64}
产生代码
选项    用途
/arch    产生代码时使用SSE或者SSE2指令(仅x86)
/clr    产生运行在the common language runtime上的输出文件
/EH    指定异常处理模型/EH{s/a}[c][r][-]
/fp    指定浮点指针行为/fp:[precise/except[-]/fast/strict]
/GA    对windows应用进行优化
/Gd    使用_cdecl调用转换(仅x86)
/Ge    激活堆栈探测
/GF    打开字符串池
/Gh    调用钩子函数_penter
/GH    调用钩子函数_pexit
/GL    打开整个程序优化
/Gm    打开最小重建造
/GR    打开运行时类型信息(RTII)
/Gr    使用_fastcall调用转换(仅x86)
/GS    检查缓冲区安全
/Gs    控制堆栈探测
/GT    使用静态线程本地存储时保证数据分配安全
/guard:cf    加入控制流安全检查
/Gv    使用_vectorcall调用转换(仅x86)
/Gw    打开整个程序的全局数据优化
/GX    打开同步异常处理
/Gy    打开函数级链接
/GZ    打开快速检查,等同于/RTC1
/Gz    使用_stdcall调用转换(仅x86)
/homeparams    强制参数通过寄存器传递,仅x64编译
/hotpatch    创建一个补丁镜像
/Qfast_transcendentals    Generates fast transcendentals.
/QIfist    禁止从浮点转换为整数是调用函数_ftol(仅x86)
/Qimprecise_fwaits    在try块内部移除fwait命令
/Qpar    打开自动并行循环
/Gpar-report    打开一个并行循环的报告级
/Gsafe_fp_loads    对浮点值使用整数移动指令,禁止某些浮点指令的装入优化
/RTC)    打开运行时错误检查
/volatile)    解释执行选择怎样的volatile关键字
输出文件
选项    用途
/doc    处理注释文档到一个XML文件
/FA    配置汇编列表文件
/Fa    创建汇编列表文件
/Fd    删除程序数据库文件
/Fe    重命名执行文件
/Fi    指定预处理输出文件名
/Fm    创建mapfile
/Fo    创建object文件
/Fp    指定预编译头文件名
/FR /Fr    参数浏览文件
预处理
选项    用途
/AI    Specifies a directory to search to resolve file references passed to the #using directive.
/C    Preserves comments during preprocessing.
/D    定预处理宏
/E    复制预处理到标准输出
/EP    复制预处理到标准输出
/FI    预处理指定的include文件
/FU    Forces the use of a file name, as if it had been passed to the #using directive.
/Fx    合并注入代码和源代码
/I    指定include文件搜索路径
/P    写预处理到一个输出文件
/U    删除预定义宏
/u    和/U相同
/X    忽略标准include路径
语言
选项    用途
/openmp    打开#pragma omp在源代码中
/vd    禁止或者打开隐藏vtordisp类的成员
/vmb    Uses best base for pointers to members.
/vmg    Uses full generality for pointers to members.
/vmm    申明多继承
/vms    申明单继承
/vmv    申明虚拟继承
/Z7    产生和C 7.0兼容的调试信息
/Za    禁用语音扩展
/Zc    指定一个标准行为在/Ze下
/Ze    打开语音扩展
/Zg    产生函数原型
/ZI    在程序数据库中包括调试信息(仅x86)
/Zi    产生完整的调试信息
/Zl    从.obj文件中删除默认的库名
/Zpn    打包结构成员
/Zs    仅做语法检查
/ZW    产生一个输出文件能运行在windows运行环境
链接
选项    用途
/F    设置堆栈尺寸
/LD    创建动态链接库
/LDd    创建一个调试动态链接库
/link    传输指定的参数给link
/LN    创建一个MSIL模型
/MD    编译创建一个多线程 DLL,使用msvcrt.lib
/MDd    编译创建一个调试多线程 DLL,使用msvcrtd.lib
/MT    编译创建一个多线程执行程序,使用libcmt.lib
/MTd    编译场景一个调试多线程执行程序,使用libcmtd.lib
预编译头
选项    用途
/Y-    在当前建造中忽略其他全部预处理头编译选项
/Yc    创建一个预编译头文件
/Yd    在全部的object文件中放置完整的调试信息
/Yu    在编译期间使用预编译头文件
杂项
选项    用途
/?    列出编译选项
@    指定一个响应文件
/analyze    打开代码分析
/bigobj    Increases the number of addressable sections in an .obj file.
/c    编译但不链接
/cgthreads    给cl.exe指定一个线程数用来优化在建造过程中的性能
/errorReport    打开在vc++终端中提供内部编译错误信息(ICE)
/FC    显示传递给cl.exe的源代码的完整路径到一个文件中
/FS    强制写入一个程序数据库文件(PDB)
/H    现在扩展名的长度
/HELP    列出编译选项
/J    改变默认char类型
/kernel    编译器和链接器将创建一个可以在windows内核中执行的执行程序
/MP    同时建造多源代码文件
/nologo    禁止显示启动版权标志
/sdl    打开一些附加的安全功能和警告
/showIncludes    在编译期间显示全部include文件的列表
/Tc/TC    指定C源代码
/Tp/TP    指定C++源代码
/V    版本信息
/Wall    打开全部警告,包括默认关闭的警告
/W    警告级别
/w    关闭全部警告
/WL    打开在用命令行编译C++源代码时使用一行显示错误和警告信息
/Wp64    侦测可能的64-bit问题
/Yd    在对象文件中放置完整的调试信息
/Yl    当创建一个调试库时植入PCH引用
/Zm    指定一个预编译头分配限制
详细的参数细节
--------------------- 
作者:john_crash 
来源:优快云 
原文:https://blog.youkuaiyun.com/john_crash/article/details/50127309 
版权声明:本文为博主原创文章,转载请附上博文链接!

### Qt与MSVC编译环境下中文显示乱码的解决方案 #### 设置Qt Creator环境 为了确保开发环境能够正确处理中文字符,在Qt Creator中需调整一些设置。进入`编辑->首选项->环境`以及`编辑->首选项->文本编辑器`,确认这些选项已针对多字节字符集进行了优化[^1]。 #### 修改源代码文件编码 由于MSVC默认并不完全支持无BOM标记的UTF-8编码,因此建议将项目的源代码文件保存为带有BOM的UTF-8格式。这可以通过大多数现代IDE或文本编辑工具完成。另一种替代方案是更改项目使用的编码标准至GBK或其他兼容Windows系统的本地化编码方式[^3]。 #### 使用宏定义和内联函数转换字符串 对于新编写的应用程序逻辑部分,推荐采用`QStringLiteral()`宏来封装所有硬编码形式存在的中文串;而对于已经存在且难以大规模重构的部分,则可考虑利用如下的静态成员函数来进行即时转换: ```cpp QString::fromStdWString(L"需要被转换成Qstring类型的宽字符常量"); ``` 这种方法可以在不影响原有架构的基础上快速修复界面展示上的乱码现象[^2]。 #### 添加预处理器指令 在全局头文件顶部加入下面几行C++预处理命令,用于指示MSVC编译期间应如何解释执行字符集: ```cpp #if _MSC_VER >= 1600 // 判断当前是否处于MSVC编译模式下 #pragma execution_character_set("utf-8") // 强制指定内部操作所基于的目标字符集为UTF-8 #endif ``` 上述措施有助于从根本上消除因不同平台间字符编码差异而引发的一系列问题[^4]。 #### 配置PRO文件中的编译参数 还可以通过修改`.pro`工程配置文件的方式向链接阶段传递额外的编译期标志位,具体做法是在该文件里追加一行或多行类似的语句以适应特定需求场景的要求[^5]: ```qmake win32-msvc*: QMAKE_CXXFLAGS += /utf-8 ``` 以上几种策略可以根据实际情况单独应用或是组合起来共同作用于同一个工程项目之中,从而达到最佳效果并彻底根治由跨平台移植所带来的潜在隐患。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值