- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC命令行编译C.
编译器 cl.exe
连接器 mlink.exe
编译格式:
cl [option...] file... [option | file]... [lib...] [@command-file] [/link link-opt...]
option是编译参数
file是编译的源文件
lib是程序需要的依赖库
command-file是命令行文件
当命令行参数过长,CMD不支持时,可将一部分命令移到文件中,附加该文件使得文件中的命令有效
link-opt 是链接选项,在输入/link后输入链接选项,则可以把这些选项传递给链接器。
注意:在格式中[option] file [option] file 虽然是options是分开了,但是所有的options都是同时作用于所有file的。
例如 cl /MT main.cpp /LD submain.cpp 的意思是 /MT /LD同时对这个两个文件起作用。相同的/互斥的参数,以后出现的为准。
例如 cl /Fo”src\\” main.cpp /Fo”symbol\\” submain.cpp 生成的obj文件都会放在symbol文件夹下。
下面介绍编译器(cl)的参数(options)
有些参数后面标记过期,该参数在VS2005下仍然有效,但是在后续版本中可能会被删除。在VS2005中可能会有其他参数来代替过期参数,在各个过期参数中会有说明。
优化选项:
/O1 体积最小优化 相当于/Og /Os /Oy /Ob2 /Gs /GF /Gy的组合
/O2 速度最快优化 相当于/Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy的组合
/Ob 扩展inline函数。
/Ob0 禁用内联。默认值。
/Ob1 仅仅内联被标识为 inline,__inline __forceinline,在class定义中写函数实现 的函数。
例如class CTest
{
public:
int GetInt()
{
return m_iInt;
}
private:
int m_iInt;
}
该函数在/Ob1的参数下,会被编译成内联函数。
/Ob2 包含/Ob1的情况,并且编译器会把可以编译成内联,但是没有加上inline关 键字的函数内联。
/Oy 省略帧指针。该参数被/O1 /O2 /Ox包含,如果需要使用帧指针,可以在后面加上/Oy-,即可使/Oy失效,该参数仅在x86下有效。
/Od 禁用Debug,加快编译速度,简化调试功能。
/Og 过期 全局优化 包括表达式省略和循环优化。
表达式省略:
a = b + c;
d = b + c;
e = b + c;
在该优化下,b+c的值只计算一次存入临时变量。
循环优化:
i = -100;
while(i0)
{
i += x + y;
}
在该优化下,x + y的值会先计算出来,等效于:
i = -100;
t = x + y;
while(i0)
{
i += t;
}
/Oi 用函数体替换函数调用。编译器会将内建函数的函数体替换掉函数调用语句,这样 可以避免函数调用时的开销提高运行速度,但是扩大了代码长度。只有内建的函数 才能被替换。库函数中的内建函数如下:
_disable _outp fabs strcmp _enable _outpw labs strcpy _inp _rotl memcmp strlen _inpw _rotr memcpy _lrotl _strset memset _lrotr abs strcat
内建函数不存在于库中,而存在于编译器中。
/Os 代码长度优化
/Ot 运行速度优化
以上两个优化只能取一种
例子:
对于函数
int differ(int x)
{
return x * 71;
}
如果选择/Os 代码长度优化,则编译为
mov eax, DWORD PTR _x$[ebp]
imul eax, 71 ;长度很短,但是该计算比较慢
如果选择/Ot 运行速度优化,则编译为
mov eax, DWORD PTR _x$[ebp]
mov ecx, eax
shl eax, 3
lea eax, DWORD PTR [eax+eax*8]
文档评论(0)