cl.exe,link.exe编译选项以及在windows下编译lua 5.2.2
来源:互联网 发布:数据管理制度 编辑:程序博客网 时间:2024/04/29 16:18
最近在使用lua,环境是windows.lua源码只提供了Makefile配置,之前多用CMake编译开源项目,看到lua编译文档中也有提供CMakeLists配置文件,因为没有在windows下单独使用cl和link的经验,所以准备先学习一下编译器和链接器选项.
CL.EXE
在MSDN的Compiler Options文档可以学习到cl的完整编译选项.这里(Compiler Options Listed by Category)提供完整的选项分类(/option和-option是一样的).
编译优化:
Option
Purpose
/O1
等同于/Og /Os /Oy /Ob2 /Gs /GF /Gy,编译会进行代码最小优化
/O2
等同于/Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy,编译器会进行代码最快优化.这是默认设置,也是release下采用的设置.
/Ob
内联函数展开控制.0不执行内联展开,1只内联展开类内定义的内联函数,2内联展开所有的内联函数.
/Od
禁止优化可以方便代码调试,
/Og
包含子表达式优化,寄存器分配(常用变量和子表达式),循环优化.
/Oi
使用内在函数可以减少函数调用的开销,通过编译器指令#pragma intrinsic来指定内在函数,内在函数列表在这里.
/Os
生成更小的代码.
/Ot
生成更快的代码.
/Ox
完全优化,生成更小更快的代码..等同/Ob /Og /Oi /Ot /Oy.
/Oy
禁用调用堆栈./Oy- 开启调用堆栈方便调试.
/favor
根据处理器平台进行优化,可选{blend | ATOM | AMD64 | INTEL64}.
代码生成:Option
Purpose
/arch
指定使用的指令集,可选[IA32|SSE|SSE2|AVX].
/clr
使用clr环境,具体可以参看clr选项.
/EH
指定如何处理异常.
/fp
指定浮点数行为.
/GA
对于wiindows可执行程序使用程序优化,声明为__declspec(thread)线程内的数据可以更快地访问,不要用于DLL程序.
/Gd
调用约定.
/Gd:将除成员函数以外的函数都指定为_cdecl(参数传入从右到左,函数调用从栈内pop,下划线修饰函数,没有大小写转换),程式内
制定的 __stdcall, __fastcall, or__vectorcall都会被覆盖.
/Gz:指定调用约定为_stdcall(对成员函数,main函数,和指定了调用约定的函数无效)._stdcall(参数右到左传入,除了指针和
引用以外都按值传入对于类会调用复制构造函数,函数以下划线_作为前缀,参数用@连接,无大小写转换)只对x86有效.
/Gr:指定_fastcall(头两个DWORD的参数从左到又传入ECX和EDX寄存器,剩下的从右到左传入,以@parameter-size<十进制>
作为函数名前缀,无大小写转换)调用约定,指定规则和适用平台和_stdcall一样.
/Gv指定_vectorcall(尽可能使用寄存器传入参数,@@parameter-size<十进制>作为函数名前缀,无大小写转换)调用约定,对
含有可变参数的函数无效,支持x86和x64支持SSE2指令集及以上指令集的架构.
/Ge
启用堆栈探针,结合/Gh指定探针钩子.
/GF
使用字符池,那么同一个字符串只会创建一份,使用时编译器会将多个变量指向同一地址.
/Gh
探针钩子_penter,结合/Ge使用.
/GH
函数退出钩子_pexit.
/GL
使能全程序优化,通过/Gl-关闭全程序优化,只进行模块内优化.
/Gm
使能最小构建.通过 .idb文件检测源码变化.
/GR
使能运行时类型信息 (RTTI),关闭时无法使用dynamic_cast和typeid,关闭后可以减少程序大小.
/Gr
见/Gd部分.
/GS
检查缓冲区溢出.
/Gs
设置栈探针触发前函数可以使用多少内存.默认为4kb
/GT
对线程内数据支持fiber safety,禁用/Og对这种数据类型的优化.
/Gv
见/Gd部分.
/Gw
使能全局数据优化,将全局数据放在COMDAT段.
/GX
使能异常处理(假定extern c函数从不抛出异常),已经废弃,使用/Gh替代.
/Gy
允许编译器组织个体函数.
/GZ
使能运行时错误检测.已废弃.
/Gz
见Gd部分.
/homeparams
强制将寄存器参数传入栈中,是的release下也能进行调试. (only for x64 native and cross compile).
/hotpatch
使得创建的映像文件支持hot patching,利用hot patching可以hack函数行为.
/Qfast_transcendentals
为超越函数(对数函数,反三角函数,指数函数等)生成内联代码.
/QIfist
根据ASCII C标准,浮点转整形是会忽略小数部分的(x86 only),通过/QIfist可以关闭这个特性,根据intel处理器参考文档,其提供四种
舍入方式1)取最近的整数,类似[x].2)舍入正无穷.3)舍入负无穷.4)舍入到0.默认的舍入模式为1),可以通过运行时函数 _control87,
_controlfp, _control87_2来修改舍入方式.
/Qimprecise_fwaits
当选项/fp:except打开的时候,编译器会在每个try块内的语句附近插入一条fwait指令,这样遇到异常时,编译器可以确定是出现在哪行.开启这个选项则会关闭编译器的这个特性.
/Qpar
开启循环并行计算特性,利用多核并行的优势,能显著提高执行速度.#pragma loop()告诉编译器可以惊醒并行优化.
/Qpar-report
设置循环并行计算报告等级,结合/Qpar选项使用.
/Qsafe_fp_loads
禁用浮点数加载优化,使用整数加载指令.(x86 only)防止加载异常情况发生,比如NAN.
/Qvec-report (Auto-Vectorizer Reporting Level)
Enables reporting levels for automatic vectorization.
/RTC
使能运行时错误检测.
/volatile
设置关键字volatile解释方式.
输出设置:Option
Purpose
/doc
为源码生成.xdc格式的文档,xdc格式可以通过xdcmake.exe工具输出xml.微软推荐的文档标签.
/FA
/FA输出汇编代码.asm. /FAs输出机器码和汇编码.cond. /FAs输出源码和汇编码.asm. /FAu使用UTF8编码输出.
/Fa
/FA可加参数的版本.
/Fd
指定调试文件pdb的名称.
/Fe
指定输出文件exe或者DLL的名称.
/Fi
指定预处理输出文件名称.
/Fm
指定输出的段档案名称.
/Fo
指定编译文件.obj的名称.
/Fp
指定要使用的预处理头文件.pch.
/FR /Fr
指定创建的.sbr文件名称,BSCMAKE工具使用此文件来创建浏览信息.
预处理器:Option
Purpose
/AI
指定#using指令搜索目录.
/C
预处理时保留注释.
/D
定义常量和宏.
/E
将预处理器输出复制到标准输出.使用#line指令对预处理过的文件行进行重排,是的错误指向的函数为源文件的真实行数.
/EP
同上,但是不加#line指令,错误行数指向预处理过后的行数,而不是源文件行数.
/FI
强制为源文件添加头文件.
/FU
强制为源文件添加#using文件.
/Fx
合并注入代码,通过穿件.mgr文件进行代码注入,注意.mgr文件内不支持宏展开,
/I
指定头文件包含搜索目录.
/P
将预处理输出到指定文件.
/U
#undef预定义符号.
/u
#undef微软预定义符号.
/X
禁用从 PATH和INCLUDE变量定义的路径搜索包含头文件.
语言:Option
Purpose
/openmp
使能 #pragma omp指令,支持opemMP 2.0标准,高效多处理器操作接口(待学习).
/vd
vtordisp(virtual construction/destruction displacement)待学习.
/vmb
必须先定义类,才能定义指向类成员的指针.
/vmg
可以在类定义之前定义类成员指针,可以解决类成员交叉引用的问题.
/vmm
编译器表示类成员变量指针的方式为多继承.
/vms
编译器表示类成员变量指针的方式为单继承.
/vmv
编译器表示类成员变量指针的方式为虚继承.
/Z7
调试信息配置.所有调试信息输出到.obj,不产生.pdb文件.
/Za
禁用ANSI C和 ANSI C++标准以外的语言扩展.利用此选项来编写多平台代码.
/Zc
指定在语言扩展下的语言行为.
/Ze
和/Za相反,启用微软的语言扩展.
/Zg
生成函数原型.
/ZI
调试信息配置.和/Zi一样,但是会禁用#pragma optimize指令,支持编辑并继续.
/Zi
控制调试信息配置.输出类型了符号调试信息到.pdb文件,此选项不影响优化.
/Zl
忽略运行时函数库.C Runtime Library的特性不再使用.
/Zp n
指定结构体成员的对齐大小.
/Zs
编译器只进行语法检测.
/ZW
进行windows运行时编译,用于生成支持微软应用商店的应用.
链接:Option
Purpose
/F
设置栈大小(字节).
/LD
创建动态连接库,如果没有制定导出文件.exp,则会创建导入库.lib.默认使用多线程C运行库.
/LDd
创建可调试的动态链接库.
/link
传入链接器参数.
/LN
创建微软中间件模块.
/MD
编译使用多线程库的Dll,MSVCRT.lib.
/MDd
编译使用调试版多线程库, MSVCRTD.lib.
/MT
编译使用多线程库的可执行文件,LIBCMT.lib.
/MTd
编译使用可调式多线程库的可执行文件 LIBCMTD.lib.
预编译头文件:
Option
Purpose
/Y-
I忽略所有的预编译头文件选项.
/Yc
创建预编译头文件
/Yd
将预编译头文件中的所有调试信息输出到.obj文件中.
/Yu
使用预编译头文件.
杂项:Option
Purpose
/?
编译器帮助.
@
指定编译器响应文件,文件内所有的命令都会作用到命令行,尤其适合命令长度大于127个字符的情况.
/analyze
使能代码分析.
/bigobj
可寻址段从65,536 (2^16)个增加到 4,294,967,296 (2^32)个.
/c
只编译,不链接.
/errorReport
开启错误报告.
/FC
输出诊断信息时打印源文件的绝对路径.
/FS
强制同步写pdb文件.
/H
限制外部名字长度,默认为2047,/H选项只能指定比2047小的长度..
/HELP
帮助.
/J
使默认char的为unsigned char,并且转换为整形时为零扩展.
/kernel
创建内核模式二进制文件.
/MP
并行构建.
/nologo
禁用l编译器信息显示.
/sdl
开启安全开发周期检测,产生更多的编译警告.
/showIncludes
在编译期输出所有包含的头文件.
/Tc /TC
/Tc指定源文件为C源文件,即使后缀不对./TC对待的所有源文件都是C源文件.
/Tp /TP
/Tp指定源文件为C++源文件,即使后缀不对./TP吧所有源文件当C++源文件对待.
/V
指定版本或者版权信息,将会输出到.obj.
/Wall
输出所有警告.
/W
设置警告等级.
/w
关闭警告.
/WL
输出更多的诊断信息.
/Wp64
检测64位系统上可能存在的类型问题,典型的有int, long, pointer.
/Yd
Places complete debugging information in all object files.
/Yl
为调试库注入pch引用,在创建使用预编译头文件的调试库出错时可能需要设置这个选项.
/Zm
指定构建预编译头文件能使用的最大内存.
LINK.EXE
Option
Purpose
@
Specifies a response file.
/ALIGN
Specifies the alignment of each section.
/ALLOWBIND
Specifies that a DLL cannot be bound.
/ALLOWISOLATION
Specifies behavior for manifest lookup.
/APPCONTAINER
Specifies whether the app must run within an appcontainer process environment.
/ASSEMBLYDEBUG
Adds the DebuggableAttribute to a managed image.
/ASSEMBLYLINKRESOURCE
Creates a link to a managed resource.
/ASSEMBLYMODULE
Specifies that a Microsoft intermediate language (MSIL) module should be imported into the assembly.
/ASSEMBLYRESOURCE
Embeds a managed resource file in an assembly.
/BASE
Sets a base address for the program.
/CLRIMAGETYPE
Sets the type (IJW, pure, or safe) of a CLR image.
/CLRSUPPORTLASTERROR
Preserves the last error code of functions that are called through the P/Invoke mechanism.
/CLRTHREADATTRIBUTE
Specifies the threading attribute to apply 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.
/DEBUG
Creates debugging information.
/DEF
Passes a module-definition (.def) file to the linker.
/DEFAULTLIB
Searches the specified library when external references are resolved.
/DELAY
Controls the delayed loading of DLLs.
/DELAYLOAD
Causes the delayed loading of the specified DLL.
/DELAYSIGN
Partially signs an assembly.
/DLL
Builds a DLL.
/DRIVER
Creates a kernel mode driver.
/DYNAMICBASE
Specifies whether to generate an executable image that can be randomly rebased at load time by using the address space layout randomization (ASLR) feature.
/ENTRY
Sets the starting address.
/errorReport
Reports internal linker errors to Microsoft.
/EXPORT
Exports a function.
/FIXED
Creates a program that can be loaded only at its preferred base address.
/FORCE
Forces a link to complete even with unresolved symbols or symbols defined more than once.
/FUNCTIONPADMIN
Creates an image that can be hot patched.
/HEAP
Sets the size of the heap, in bytes.
/HIGHENTROPYVA
Specifies support for high-entropy 64-bit address space layout randomization (ASLR).
/IDLOUT
Specifies the name of the .idl file and other MIDL output files.
/IGNOREIDL
Prevents the processing of attribute information into an .idl file.
/IMPLIB
Overrides the default import library name.
/INCLUDE
Forces symbol references.
/INCREMENTAL
Controls incremental linking.
/INTEGRITYCHECK
Specifies that the module requires a signature check at load time.
/KEYCONTAINER
Specifies a key container to sign an assembly.
/KEYFILE
Specifies a key or key pair to sign an assembly.
/LARGEADDRESSAWARE
Tells the compiler that the application supports addresses larger than two gigabytes
/LIBPATH
Enables user override of the environmental library path.
/LTCG
Specifies link-time code generation.
/MACHINE
Specifies the target platform.
/MANIFEST
Creates a side-by-side manifest file and optionally embeds it in the binary.
/MANIFESTDEPENDENCY
Specifies a <dependentAssembly> section in the manifest file.
/MANIFESTFILE
Changes the default name of the manifest file.
/MANIFESTINPUT
Specifies a manifest input file for the linker to process and embed in the binary. You can use this option multiple times to specify more than one manifest input file.
/MANIFESTUAC
Specifies whether User Account Control (UAC) information is embedded in the program manifest.
/MAP
Creates a mapfile.
/MAPINFO
Includes the specified information in the mapfile.
/MERGE
Combines sections.
/MIDL
Specifies MIDL command-line options.
/NOASSEMBLY
Suppresses the creation of a .NET Framework assembly.
/NODEFAULTLIB
Ignores all (or the specified) default libraries when external references are resolved.
/NOENTRY
Creates a resource-only DLL.
/NOLOGO
Suppresses the startup banner.
/NXCOMPAT
Marks an executable as verified to be compatible with the Windows Data Execution Prevention feature.
/OPT
Controls LINK optimizations.
/ORDER
Places COMDATs into the image in a predetermined order.
/OUT
Specifies the output file name.
/PDB
Creates a program database (PDB) file.
/PDBALTPATH
Uses an alternate location to save a PDB file.
/PDBSTRIPPED
Creates a program database (PDB) file that has no private symbols.
/PGD
Specifies a .pgd file for profile-guided optimizations.
/PROFILE
Produces an output file that can be used with the Performance Tools profiler.
/RELEASE
Sets the Checksum in the .exe header.
/SAFESEH
Specifies that the image will contain a table of safe exception handlers.
/SECTION
Overrides the attributes of a section.
/STACK
Sets the size of the stack in bytes.
/STUB
Attaches an MS-DOS stub program to a Win32 program.
/SUBSYSTEM
Tells the operating system how to run the .exe file.
/SWAPRUN
Tells the operating system to copy the linker output to a swap file before it is run.
/TLBID
Specifies the resource ID of the linker-generated type library.
/TLBOUT
Specifies the name of the .tlb file and other MIDL output files.
/TSAWARE
Creates an application that is designed specifically to run under Terminal Server.
/VERBOSE
Prints linker progress messages.
/VERSION
Assigns a version number.
/WINMD
Enables generation of a Windows Runtime Metadata file.
/WINMDFILE
Specifies the file name for the Windows Runtime Metadata (winmd) output file that's generated by the /WINMD linker option.
/WINMDKEYFILE
Specifies a key or key pair to sign a Windows Runtime Metadata file.
/WINMDKEYCONTAINER
Specifies a key container to sign a Windows Metadata file.
/WINMDDELAYSIGN
Partially signs a Windows Runtime Metadata (.winmd) file by placing the public key in the winmd file.
/WX
Treats linker warnings as errors.
- cl.exe,link.exe编译选项以及在windows下编译lua 5.2.2
- cl.exe编译选项
- cl.exe 编译选项
- Windows下在命令行实现cl.exe编译代码
- Windows环境使用VIM编译简单C++程序(使用cl.exe和link.exe)
- Windows下用VC++命令行编译c(cl.exe)
- 使用cl.exe在windows控制台下编译C++程序
- windows平台cl.exe编译pcre 8.13
- Win32 SDK基础(2)—— 自己动手用cl.exe和link.exe编译和连接程序
- windows下编译gvim.exe
- VC++6.0编译选项(CL.exe编译选项)及VC支持文件类型
- cl.exe link.exe 用法
- 一步步通过命令行cl.exe编译Windows程序
- 一步步通过命令行cl.exe编译Windows程序
- linux 下调用 cl.exe 编译 MFC 程序脚本
- 命令行下cl.exe编译链接的问题及解决方法
- 命令行下使用CL.exe编译多cpp文件工程
- 在编译时发现“Compiling... ,Error spawning cl.exe”错误
- linux的自旋锁
- Js模版引擎handlebars.js实用教程——目录
- Xcode5中的Linking选项去哪儿了(Xcode Linking选项不见了)
- LeetCode OJ:Evaluate Reverse Polish Notation
- java数据库连接(一)--从最简单地jdbc连接说起
- cl.exe,link.exe编译选项以及在windows下编译lua 5.2.2
- Longest Common Prefix 最长公共前缀
- 项目开发计划
- 10014 - Simple calculations
- LeetCode OJ:Max Points on a Line
- How To Setup Your Own VPN With PPTP
- 每天两道oracle笔试题+第四天:1、创建用户时,需要授予新用户什么权限方能使其连上数据库?2、备份如何分类?
- Fortran&OpenMP - 1.环境配置
- JVM内部结构及GC图解