CL.exe是控制Microsoft C和C++编译器与链接器的32位工具。编译器产生通用对象文件格式(COFF)对象(.obj)文件。链接器产生可执行文件(.exe)或动态链接库文件(DLL)。
注意,所有编译器选项都区分大小写。
若要编译但不链接,请使用/c。
使用NMAKE生成输出文件。
使用BSCMAKE支持类浏览。
以下是一个完整的编译器选项分类列表。
优化
选项 作用
/O1 创建小代码
/O2 创建快速代码
/Oa 假设没有别名
/Ob 控制内联展开
/Od 禁用优化
/Og 使用全局优化
/Oi 生成内部函数
/Op 改善浮点数一致性
/Os 代码大小优先
/Ot 代码速度优先
/Ow 假定在函数调用中使用别名
/Ox 使用最大优化(/Ob1gity /Gs)
/Oy 省略框架指针
代码生成
选项 作用
/clr 启用C++的托管扩展并产生在公共语言运行库上运行的输出文件
/EH 指定异常处理模型
/G3 优化代码以优选386处理器。在Visual C++ 5.0中已经停用,编译器将忽略此选项
/G4 优化代码以优选486处理器。在Visual C++ 5.0中已经停用,编译器将忽略此选项
/G5 优化代码以优选Pentium
/GB 与/G6等效;将_M_IX86的值设置为600
/Gd 使用__cdecl调用约定
/Ge 激活堆栈探测
/GF
/GF 启用字符串池
/GH 调用挂钩函数_penter
/GH 调用挂钩函数_pexit
/GL 启用全程序优化
/Gm 启用最小重新生成
/Gr 启用运行时类型信息(RTTI)
/Gr 使用__fastcall调用约定
/GS 控制堆栈探测
/GT 支持使用静态线程本地存储区分配的数据的纤程安全
/GX 启用同步异常处理
/Gy 启用函数级链接
/GZ 使用__stdcall调用约定
/MD 使用MSVCRT.lib创建多线程DLL
/MDd 使用MSVCRTD.lib创建调试多线程DLL
/ML 使用LIBC.lib创建单线程可执行文件
/MLd 使用LIBCD.lib创建调试单线程可执行文件
/MT 使用LIBCMT.lib创建多线程可执行文件
/MTd 使用LIBCMTD.lib创建调试多线程可执行文件
输出文件
选项 作用
/FA
/FA 创建列表文件
设置列表文件名
/Fd 重命名程序数据库文件
/Fe 重命名可执行文件
/Fm 创建映射文件
/Fo 创建对象文件
/Fp 指定预编译头文件名
/FR
/FR 生成浏览器文件
/Fx 将插入的代码与源文件合并
调试
选项 作用
/GS 缓冲区安全检查
/GZ 与/RTC1相同
/RTC 启用运行时错误检查
/Wp64 检测64位可移植性问题
/Yd 将完整的调试信息放在所有对象文件中
/Yl 创建调试库时插入PCH引用
/Z7 生成与C 7.0兼容的调试信息
/Zd 生成行号
/Zi 生成完整的调试信息
预处理器
选项 作用
/AI 指定在解析传递到#using指令的文件引用时搜索的目录
/c 在预处理期间保留注释
/D 定义常数和宏
/E 将预处理器输出复制到标准输出
/EP 将预处理器输出复制到标准输出
/Fl 预处理指定的包含文件
/FU 强制使用文件名,就像它已被传递到#using指令一样
/I 在目录中搜索包含文件
/P 将预处理器输出写入文件
/U 移除预定义宏
/U 移除所有的预定义宏
/X 忽略标准包含目录
/ZI 将调试信息包含在与“编辑并继续”兼容的程序数据库中
语言
选项 作用
/noBool 取消C++ bool、true和false关键字
/vd 取消或启用隐藏的vtordisp类成员
/vmb 对指向成员的指针使用最佳的基
/vmg 对指向成员的指针使用完全一般性
/vmm 声明多重继承
/vms 声明单一继承
/vmv 声明虚拟继承
/Za 禁用语言扩展
/Zc 在/Ze下指定标准行为
/Ze 启用语言扩展
/Zg 生成函数原型
/Zl 从.obj文件中移除默认库名
/Zp n 封装结构成员
/Zs 只检查语法
链接
选项 作用
/F 设置堆栈大小
/LD 创建动态链接库
/LDd 创建调试动态链接库
/link 将指定的选项传递给LINK
/MD 使用MSVCRT.lib编译以创建多线程DLL
/MDd 使用MSVCRTD.lib编译以创建调试多线程DLL
/ML 使用LIBC.lib编译以创建单线程可执行文件
/MLd 使用LIBCD.lib编译以创建调试单线程可执行文件
/MT 使用LIBCMT.lib编译以创建多线程可执行文件
/MTd 使用LIBCMTD.lib编译以创建调试多线程可执行文件
预编译头
选项 作用
/Y- 忽略当前生成中的所有其他预编译头编译器选项
/Yc 创建预编译头文件
/Yd 将完整的调试信息放在所有对象文件中
/Yu 在生成期间使用预编译头文件
/YX 自动处理预编译头
杂项
选项 作用
@ 指定响应文件
/? 列出编译器选项
/c 编译但不链接
/H 限制外部(公共)名称的长度
/HELP 列出编译器选项
/J 更改默认的char类型
/NOLOGO 取消显示登录版权标志
/QI0f 确保Pentium 0F指令没有问题
/QIfdiv FDIV、FPREM、FPTAN和FPATAN指令有缺陷的Intel Pentium微处理器的变通方法
QIfist 当需要从浮点类型转换为整型时取消Helper函数_ftol的调用
/showIncludes 在编译期间显示所有包含文件的列表
/Tc
/Tc 指定C源文件
/Tp
/Tp 指定C++源文件
/V 设置版本字符串
/w 设置警告等级
/w 禁用所有警告
/Wall 启用所有警告,包括默认情况下禁用的警告
/WL 在从命令行编译C++源代码时启用错误信息和警告消息的单行诊断
/Zm 设置编译器的内存分配限制
CL 命令行使用下列语法:
CL [option...] file... [option | file]... [lib...] [@command-file] [/link link-opt...]
下面说明CL命令的输入项意义
option 一个或多个CL选项。请注意,所有选项都应用于所有指定的源文件。选项是由一个正斜杠(/)或一个短划线(–)指定的。如果某个选项带有参数,则该选项的说明指定在选项和参数之间是否允许有空格。选项名(/HELP选项除外)区分大小写。有关更多信息,请参阅CL选项的顺序。
file 一个或多个源文件、.obj文件或库的名称。CL编译源文件并将.obj文件和库的名称传递给链接器。有关更多信息,请参阅CL文件名语法。
lib 一个或多个库名。CL将这些名称传递给链接器。
您可以指定任意数目的选项、文件名和库名,条件是命令行上的字符数不超过1024,该限制是操作系统指定的。
command-file 包含多个选项和文件名的文件。有关更多信息,请参阅CL命令文件。
link-opt 一个或多个链接器选项。CL将这些选项传递给链接器。