CL and Link commands
cl /Od /D /D_DEBUG /Yd /Zi /EHsc /MTd /GS /Fo"build/" /W3 /nologo /c
/I "ANY INCLUDE FOLDER" /D "ANY DEFINED MARCO" "SOURCE FILES"
Important note for above example
/c - compile only. Without this, it will tries to link as well
/I - add 1 include folder
/D - add 1 user define marco
/D_DEBUG - add debug information
link /DEBUG /OUT:"OUTPUT NAME" /INCREMENTAL:NO /NOLOGO
/LIBPATH:"ADDITIONAL LIBRARY PATH" /DLL /SUBSYSTEM:WINDOWS
/OPT:REF /OPT:ICF /IMPLIB:"LIBRARY OUTPUT" /MACHINE:X86 "LIBRARY FILES"
Important note for above example
/DEBUG - link with debug information
>/OUT - output name and location
/LIBPATH - add 1 library path
Sample Usage
cl /Od /D /D_DEBUG /Yd /Zi /EHsc /MTd /GS /Fo"build/" /W3 /nologo /c
/I "include" /I "test\include" /D "MY_MARCO1" /D "MY_MARCO2" src\*.c src\*.cpp
link /DEBUG /OUT:"output\my.dll" /INCREMENTAL:NO /NOLOGO
/LIBPATH:"lib" /LIBPATH:"my\lib" /DLL /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /IMPLIB:"output\my.lib" /MACHINE:X86 first.lib second.lib
For convenience, I copied the full cl and link options below
C/C++ COMPILER OPTIONS
-OPTIMIZATION-
/O1 minimize space
/O2 maximize speed
/Ob<n> inline expansion (default n=0)
/Od disable optimizations (default)
/Og enable global optimization
/Oi[-] enable intrinsic functions
/Os favor code space
/Ot favor code speed
/Ox maximum optimizations
/Oy[-] enable frame pointer omission
-CODE GENERATION-
/GF enable read-only string pooling
/Gm[-] enable minimal rebuild
/Gy[-] separate functions for linker
/GS[-] enable security checks
/GR[-] enable C++ RTTI
/GX[-] enable C++ EH (same as /EHsc)
/EHs enable C++ EH (no SEH exceptions)
/EHa enable C++ EH (w/ SEH exceptions)
/EHc extern "C" defaults to nothrow
/fp:<except[-]|fast|precise|strict> choose floating-point model:
except[-] - consider floating-point exceptions when generating code
fast - "fast" floating-point model; results are less predictable
precise - "precise" floating-point model; results are predictable
strict - "strict" floating-point model (implies /fp:except)
/GL[-] enable link-time code generation
/GA optimize for Windows Application
/Ge force stack checking for all funcs
/Gs[num] control stack checking calls
/Gh enable _penter function call
/GH enable _pexit function call
/GT generate fiber-safe TLS accesses
/RTC1 Enable fast checks (/RTCsu)
/RTCc Convert to smaller type checks
/RTCs Stack Frame runtime checking
/RTCu Uninitialized local usage checks
/clr[:option] compile for common language runtime, where option is:
pure - produce IL-only output file (no native executable code)
safe - produce IL-only verifiable output file
oldSyntax - accept the Managed Extensions syntax from Visual C++ 2002/2003
initialAppDomain - enable initial AppDomain behavior of Visual C++ 2002
noAssembly - do not produce an assembly
/Gd __cdecl calling convention
/Gr __fastcall calling convention
/Gz __stdcall calling convention
/GZ Enable stack checks (/RTCs)
/QIfist[-] use FIST instead of ftol()
/hotpatch ensure function padding for hotpatchable images
/arch:<SSE|SSE2> minimum CPU architecture requirements, one of:
SSE - enable use of instructions available with SSE enabled CPUs
SSE2 - enable use of instructions available with SSE2 enabled CPUs
-OUTPUT FILES-
/Fa[file] name assembly listing file
/FA[scu] configure assembly listing
/Fd[file] name .PDB file
/Fe<file> name executable file
/Fm[file] name map file
/Fo<file> name object file
/Fp<file> name precompiled header file
/Fr[file] name source browser file
/FR[file] name extended .SBR file
/doc[file] process XML documentation comments and optionally name the .xdc file
-PREPROCESSOR-
/AI<dir> add to assembly search path
/FU<file> forced using assembly/module
/C don't strip comments
/D<name>{=|#}<text> define macro
/E preprocess to stdout
/EP preprocess to stdout, no #line
/P preprocess to file
/Fx merge injected code to file
/FI<file> name forced include file
/U<name> remove predefined macro
/u remove all predefined macros
/I<dir> add to include search path
/X ignore "standard places"
-LANGUAGE-
/Zi enable debugging information
/Z7 enable old-style debug info
/Zp[n] pack structs on n-byte boundary
/Za disable extensions
/Ze enable extensions (default)
/Zl omit default library name in .OBJ
/Zg generate function prototypes
/Zs syntax check only
/vd{0|1|2} disable/enable vtordisp
/vm<x> type of pointers to members
/Zc:arg1[,arg2] C++ language conformance, where arguments can be:
forScope[-] - enforce Standard C++ for scoping rules
wchar_t[-] - wchar_t is the native type, not a typedef
/ZI enable Edit and Continue debug info
/openmp enable OpenMP 2.0 language extensions
-MISCELLANEOUS-
@<file> options response file
/?, /help print this help message
/bigobj generate extended object format
/c compile only, no link
/errorReport:option Report internal compiler errors to Microsoft
none - do not send report
prompt - prompt to immediately send report
queue - at next admin logon, prompt to send report (default)
send - send report automatically
/FC use full pathnames in diagnostics
/H<num> max external name length
/J default char type is unsigned
/nologo suppress copyright message
/showIncludes show include file names
/Tc<source file> compile file as .c
/Tp<source file> compile file as .cpp
/TC compile all files as .c
/TP compile all files as .cpp
/V<string> set version string
/w disable all warnings
/wd<n> disable warning n
/we<n> treat warning n as an error
/wo<n> issue warning n once
/w<l><n> set warning level 1-4 for n
/W<n> set warning level (default n=1)
/Wall enable all warnings
/WL enable one line diagnostics
/WX treat warnings as errors
/Yc[file] create .PCH file
/Yd put debug info in every .OBJ
/Yl[sym] inject .PCH ref for debug lib
/Yu[file] use .PCH file
/Y- disable all PCH options
/Zm<n> max memory alloc (% of default)
/Wp64 enable 64 bit porting warnings
-LINKING-
/LD Create .DLL
/LDd Create .DLL debug library
/LN Create a .netmodule
/F<num> set stack size
/link [linker options and libraries]
/MD link with MSVCRT.LIB
/MT link with LIBCMT.LIB
/MDd link with MSVCRTD.LIB debug lib
/MTd link with LIBCMTD.LIB debug lib
LINK is a tool that links Common Object File Format (COFF) object files and libraries to create a executable (.exe) file or dynamic-link library (DLL).
The table below is a comprehensive list of options for LINK.exe. This section also includes information on:
Linker options specified on the command line are not case sensitive: /base and /BASE mean the same thing.
You can specify some linker options via the comment pragma.
Option | Purpose |
---|---|
Specifies a response file | |
Specifies the alignment of each section | |
Specifies that a DLL cannot be bound | |
Specifies behavior for manifest lookup. | |
Adds the DebuggableAttribute to a managed image. | |
Create a link to a managed resource. | |
Specifies that a Microsoft Intermediate Language (MSIL) module should be imported into the assembly | |
Embeds a managed resource file to an assembly | |
Sets a base address for the program | |
Sets the type (IJW, pure, or safe) of a CLR image. | |
Preserves the last error code of functions called through the P/Invoke mechanism. | |
Specify which threading attribute you want applied to the entry point of your CLR program. | |
/CLRUNMANAGEDCODECHECK specifies whether the linker will apply the SuppressUnmanagedCodeSecurity attribute to linker-generated PInvoke stubs that call from managed code into native DLLs. | |
Creates debugging information | |
Passes a module-definition (.def) file to the linker | |
Searches the specified library when resolving external references | |
Controls the delayed loading of DLLs | |
Causes the delayed loading of the specified DLL | |
Partially sign an assembly. | |
Builds a DLL | |
Creates a Windows NT kernel mode driver | |
Sets the starting address | |
Report internal linker errors to Microsoft. | |
Exports a function | |
Creates a program that can be loaded only at its preferred base address | |
Forces a link to complete in spite of unresolved or symbols defined more than once | |
Creates a hotpatchable image. | |
Sets the size of the heap in bytes | |
Specifies the name of the .idl file and other MIDL output files | |
Prevents processing attribute information into an .idl file | |
Overrides the default import library name | |
Forces symbol references | |
Controls incremental linking | |
Specify a key container to sign an assembly. | |
Specify key or key pair to sign an assembly. | |
Tells the compiler that the application supports addresses larger than two gigabytes | |
Allows the user to override the environmental library path | |
Specifies link-time code generation | |
Specifies the target platform | |
Create a side-by-side manifest file. | |
Specify a <dependentAssembly> section in your manifest file. | |
Change the default name of the manifest file. | |
Creates a mapfile | |
Includes the specified information in the mapfile | |
Combines sections | |
Specifies MIDL command line options | |
Suppresses the creation of a .NET Framework assembly | |
Ignores all (or specified) default libraries when resolving external references | |
Creates a resource-only DLL | |
Suppresses startup banner | |
Marks an executable as having been tested to be compatible with Windows Data Execution Prevention feature. | |
Controls LINK optimizations | |
Places COMDATs into the image in a predetermined order | |
Specifies the output file name | |
Creates a program database (PDB) file | |
Creates a program database (PDB) file with no private symbols | |
Specify .pgd file for profile guided optionizations. | |
Produces an output file that can be used with the Performance Tools profiler. | |
Sets the Checksum in the .exe header | |
Specify that the image will contain a table of safe exception handlers. | |
Overrides the attributes of a section | |
Sets the size of the stack in bytes | |
Attaches an MS-DOS stub program to a Win32 program | |
Tells the operating system how to run the .exe file | |
Tells the operating system to copy the linker output to a swap file before running it | |
Allows you to specify the resource ID of the linker-generated type library | |
Specifies the name of the .tlb file and other MIDL output files | |
Creates an application that is specifically designed to run under Terminal Server | |
Prints linker progress messages | |
Assigns a version number | |
Treat linker warnings as errors. |
Comments
Post a Comment