紧接前文,第一行cl命令如下:

  1. 1>  cl /c /IC:\...\include /ZI /nologo- /W3 /WX- /sdl /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"stdafx.h" /Fp"Debug\HelloWorld.pch" /Fo"Debug\\" /Fd"Debug\vc110.pdb" /Gd /TP /analyze- /errorReport:prompt stdafx.cpp
  2. 1>cl : Command line warning D9035: option 'nologo-' has been deprecated and will be removed in a future release

找到了MSDN的文档:

http://msdn.microsoft.com/en-us/library/vstudio/9s7c9wdw.aspx

也可以在Developer Command Prompt for VS2012终端窗口中输入cl /? 获得帮助信息。

/c 代表只编译不链接。

/I 指定头文件的目录

/C 在编译期间保留代码注释,这里和/I连在一起使用,/IC

首先介绍一个概念,VC中有个PDB文件,全称是Program Database,用来存放程序信息的小的数据库文件。

编译Debug版本时,调试信息需要保留,我们可以选择直接将调试信息写到.obj文件中,或者存到.pdb文件中。

/Z7 不产生.pdb文件,将所有调试信息存入.obj文件中

/Zi和/ZI 都产生.pdb文件,不过/ZI支持"编辑继续调试"功能, (the edit and continue feature), 看上去更酷,但是我从来没有用过这个功能。

/ZI有一些边际效应,会禁止#pragma optmize 指令,也不能和/clr一起用。

/nologo- 已经无效,自己生成命令行的时候,没必要用了。

/W3 也中警告级别,VC提供了很多警告级别,参考http://msdn.microsoft.com/en-us/library/vstudio/thxezb7y.aspx

自己编译的话,直接用/Wall最好。

/WX- 不太明白为什么有 - 号,(估计是和:NO的意思相同,也就是不启用该功能), /WX的意思是将warning转变成error,这样强迫消除所有的warning,如果和/Wall一起使用,那是最好的。

/sdl 是对代码进行安全检查,如果发现相关警告,转变成错误输出

/Od 禁止优化

/Oy- 禁止该选项,该选项如果没有 - 号,则会在x86上编译时忽略frame-pointer,起到加速程序的作用。 frame-pointer,我暂时不知道是啥。

/D 预处理定义,后面可以跟不同的参数都是宏啊,比如

  1. /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE

/Gm 启用最小化重新编译, VC用.idb保留了上次编译的缓存信息,包括文件依赖关系。下次编译时可以使用.idb文件用来检查,跳过不需要重新编译的文件。

/EH 异常处理模式,后面可以接一些参数:http://msdn.microsoft.com/en-us/library/vstudio/1deeycx5.aspx

通常都用/EHsc

/RTC 运行时错误检查,参考:http://msdn.microsoft.com/en-us/library/vstudio/8wtf2dfz.aspx

/MDd 和上面一个都很重要,使用Debug版本的多线程运行时动态库,参考:http://msdn.microsoft.com/en-us/library/vstudio/2kzt1wy3.aspx

/GS 缓冲区安全检查

看到这里,发现cl其实参数很多很多,VC提供了默认的选项,一般都够用。不过仔细分析一下,还是能够对cl的特性了解不少,对于提高编译器的认识还是很有好处的。

/fp:precise 是和浮点数相关,参考:http://msdn.microsoft.com/en-us/library/vstudio/e7s85ffb.aspx

/Zc:wchar_t 指定wchar_t是native type,我现在还不不清楚有什么作用。

/Zc:forScope用/Ze来实现标准C++的for循环, /Ze已经被废除,所以这个选项似乎没什么意义。

/Yc "stdafx.h" 制定stdafx.h为预编译头文件

/Fp"Debug\HelloWorld.pch" 指定预编译文件, 这样staafx.h编译出的内容放在HelloWorld.pch中,可以大大提高编译速度。因为VC中的预编译文件很大,每次重新编译很耗时。

/Fo"Debug\\" 指定.obj文件存放在Debug目录下

/Fd"Debug\vc110.pdb" 指定pdb文件路径,pdb前面已经介绍过了。

/Gd 仅用于x86平台。如果C++函数没有显示指定__stdcall或者__fastcall,就采用__cdecl

/Tp 指定C++源文件

/analyze- 这是关闭代码分析功能

/errorReport:prompt 提示内部错误信息

以上是编译用的参数解释。后面还会看一下链接用的参数。

http://blog.csdn.net/csfreebird/article/details/9769905

常用cl编译命令参数解释的更多相关文章

  1. 常用cl命令参数解释

    紧接前文,第一行cl命令如下: 1> cl /c /IC:\...\include /ZI /nologo- /W3 /WX- /sdl /Od /Oy- /D WIN32 /D _DEBUG ...

  2. Linux 编译命令参数

    基本格式:gcc [options] file1 file2... //若不加入参数,则按默认参数依次执行编译.汇编和链接操作,生成的可执行文件名为 a.out 常用参数:-E //只执行预处理操作 ...

  3. ubuntu下常用的apt-get 命令参数

    apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-get install package ...

  4. Android常用的编译命令

    1.make -jX X表示数字,这个命令将编译Android系统并生成镜像,XX表示可以使用到的CPU核数,这在配置好的电脑上特别有用,公司的16核ubuntu服务器执行make -j16只要不到2 ...

  5. composer常用的一些命令\参数\说明

    安装 curl -sS https://getcomposer.org/installer | php 或者 php -r "readfile('https://getcomposer.or ...

  6. linux下top命令参数解释

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up 1:22, 1 ...

  7. tar 命令参数解释

    tar 命令 tar [-cxtzjvfpPN]文件与目录参数说明:-c :建立一个打包文件:-x :解开一个打包文件:-t :查看 tar包里面的文件:(特别注意,在选择参数时,c/x/t仅能存在一 ...

  8. ps 命令参数解释

    转自:https://www.cnblogs.com/fps2tao/p/7692482.html A 显示所有进程(等价于-e)(utility)-a 显示一个终端的所有进程,除了会话引线-N 忽略 ...

  9. Linux netstat命令参数解释

    netstat –ntlp 显示 tcp 的监听端口 netstat –ntlp 显示 tcp udp 的监听端口 netstat –r 显示路由表 netstat –rn 显示路由表不做名称解析(较 ...

随机推荐

  1. [Http] Understand what an HTTP Request is

    Let's look at several HTTP requests to learn the basic structure of these messages, and how the vari ...

  2. php实现二叉树的镜像(二叉树就是递归)

    php实现二叉树的镜像(二叉树就是递归) 一.总结 二叉树就是递归 二.php实现二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / ...

  3. dmalloc arm-linux平台使用

    话说“工欲善其事,必先得其器”,用C语言写程序,最怕遇到个什么内存泄漏,内存越界访问了,心里那个急啊... 如果在i368-linlux上,valgrind工具是首选,但在arm-linux平台上,如 ...

  4. sysbench压测Oracle

    安装: yum -y install make m4  autoconf automake libtool pkgconfig libaio-devel rpm -Uvh http://dl.fedo ...

  5. [Redux] Avoid action type naming conflicts

    In redux, the action type is just a normal string type, it is easy to get naming conflicts in large ...

  6. [.NET Core 24]把project.json迁移到.csproj

    链接:https://blog.jetbrains.com/dotnet/2017/04/04/rider-eap-update-csproj-based-net-core-support-migra ...

  7. [HTML5] Focus management using CSS, HTML, and JavaScript

    Something important to consider when coding a web application is managing the user's focus. For keyb ...

  8. BZOJ1415 聪聪与可可 - 期望dp

    传送门 题目大意: 一张无向图上有一只猫和一只老鼠,猫先走,鼠后走.猫每次会向与其相邻的并且距离老鼠最近的点移动(若距离相等去编号较小的),如果移动一步后还没吃到老鼠,还可以再移动一步(算在一个时间内 ...

  9. maven Java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

    如果你可以确认你的maven Dependencies中已经导入了如下的jar包,那么你就要检查下Deployment Assembly 选中项目 alt+enter,然后查看maven依赖有没有被添 ...

  10. jeesuite分布式框架环境搭建

    一.简述 这是菜鸟走向开源的第一步.开源项目jeesuite:http://git.oschina.net/vakinge/jeesuite-libs jeesuite是托管在码云上的开源项目,是一个 ...