CL.EXE is a 32-bit tool that controls the Microsoft C and C++ compilers and linker. The compilers produce Common Object File Format (COFF) object (.OBJ) files. The linker produces executable (.EXE) files or dynamic-link libraries (DLLs).
The following is a comprehensive, alphabetic list of options for the compiler (CL.EXE). Click any option name for specific information about it. Also see the compiler options listed by category of purpose.
| Option name and arguments | Purpose |
| /C | Preserves comments during preprocessing |
| /c | Compiles without linking |
| /Dname[= | # [{string | number}] ] | Defines constants and macros |
| /E | Copies preprocessor output to standard output |
| /EH{s|a}[c][-] | Specifies the model of exception handling |
| /EP | Copies preprocessor output to standard output |
| /F number | Sets stack size |
| /FA[c|s] | Creates a listing file |
| /Fa | Sets listing file name |
| /Fdfilename | Renames program database file |
| /FD | Generate file dependencies |
| /Fefilename | Renames the executable file |
| /FIfilename | Preprocesses the specified include file |
| /Fm[filename] | Creates a map file |
| /Fofilename | Creates an object file |
| /Fpfilename | Specifies a precompiled header file name |
/FR[filename] /Fr[filename] | Generate browser files |
| /G3 | Optimizes code to favor the 386 processor. Phased out in Visual C++ 5.0, the compiler will ignore this option |
| /G4 | Optimizes code to favor the 486 processor. Phased out in Visual C++ 5.0, the compiler will ignore this option |
| /G5 | Optimizes code to favor the Pentium processor |
| /G6 | Optimizes code to favor the Pentium Pro processor |
| /GA | Optimizes code for Windows application |
| /GB | Optimizes code to favor the Pentium processor. Blends optimizations for the 80386 (/G3), 80486 (/G4), Pentium (/G5), and Pentium Pro (/G6) options. |
| /GD | Optimizes code for Windows DLL |
| /Gd | Uses the __cdecl calling convention |
| /Ge | Activates stack probes |
/GF /Gf | Enable string pooling |
| /Gh | Calls hook function, __penter |
| /Gi | Enables incremental compilation |
| /Gm | Enables minimal rebuild |
| /GR | Enables run-time type information (RTTI) |
| /Gr | Uses the __fastcall calling convention |
| /Gssize | Controls stack probes |
| /GT | Supports fiber safety for data allocated using static thread-local storage. |
| /GX[–] | Enables synchronous exception handling |
| /Gy | Enables function-level linking |
| /GZ | Catch release-build errors in debug build |
| /Gz | Uses the __stdcall calling convention |
| /Hnumber | Restricts the length of external (public) names |
| /HELP | Lists the compiler options |
| /Idirectory | Searches a directory for include files |
| /J | Changes the default char type |
| /LD | Creates a dynamic-link library |
| /LDd | Creates a debug dynamic-link library |
| /link option | Passes the specified option to LINK |
| /MD | Creates a multithreaded DLL, using MSVCRT.LIB |
| /MDd | Creates a debug multithreaded DLL, using MSVCRTD.LIB |
| /ML | Creates a single-threaded executable file, using LIBC.LIB |
| /MLd | Creates a debug single-threaded executable file, using LIBCD.LIB |
| /MT | Creates a multithreaded executable file, using LIBCMT.LIB |
| /MTd | Creates a debug multithreaded executable file, using LIBCMTD.LIB |
| /nologo | Suppresses display of sign-on banner |
| /O1 | Creates small code |
| /O2 | Creates fast code |
| /Oa | Assumes no aliasing |
| /Ob | Controls inline expansion |
| /Od | Disables optimization |
| /Og | Uses global optimizations |
| /Oi | Generates intrinsic functions |
| /Op | Improves floating-point consistency |
| /Os | Favors small code |
| /Ot | Favors fast code |
| /Ow | Assumes aliasing across function calls |
| /Ox | Uses maximum optimization (/Ob1gity /Gs) |
| /Oy | Omits frame pointer |
| /Qlf | Generates additional debugging information for kernal-mode device drivers. |
| /QI0f | Performs Pentium 0x0f erratum fix |
| /QIfdiv[–] | Performs Pentium FDIV erratum fix |
| /P | Writes preprocessor output to a file |
/Tcfilename /TC | Specifies a C source file |
/Tpfilename /TP | Specifies a C++ source file |
| /Usymbol | Removes a predefined macro |
| /u | Removes all predefined macros |
| /V | Sets the version string |
| /vd{0|1} | Suppresses or enables hidden vtordisp class members |
| /vmb | Uses best base for pointers to members |
| /vmg | Uses full generality for pointers to members |
| /vmm | Declares multiple inheritance |
| /vms | Declares single inheritance |
| /vmv | Declares virtual inheritance |
| /Wlevel | Sets warning level |
| /w | Disables all warnings |
| /X | Ignores the standard include directory |
| /Yc[filename] | Creates a precompiled header file |
| /Yd | Places complete debugging information in all object files |
| /Yu[filename] | Uses a precompiled header file during build |
| /YX | Automates precompiled header |
| /Z7 | Generates C 7.0–compatible debugging information |
| /Za | Disables language extensions |
| /Zd | Generates line numbers |
| /Ze | Enables language extensions |
| /Zg | Generates function prototypes |
| /Zi | Generates complete debugging information |
| /ZI | Includes debug information in a program database compatible with Edit and Continue. |
| /Zl | Removes default library name from .OBJ file |
| /Zmnumber | Sets the compiler's memory allocation limit |
| /Zn | Turns off SBRPACK for .SBR files |
| /Zpn | Packs structure members |
| /Zs | Checks syntax only |