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).
For information on specifying options, see Set Compiler Options. Other topics covered in this section are Fast Compilation and CL Invokes the Linker.
To compile without linking, use /c on the command line or click the Compile command on the Build menu.
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 |