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 | 指定一个预编译头分配限制 |
详细的参数细节