紧接前文,第一行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. JS实现页面table鼠标移动改变tr行颜色,单击tr选中复选框功能

    JS源代码: //需要设置tr背景颜色 var highlightcolor='#bfecfc'; //设置背景颜色 function changeto(index){ var tr1 = docum ...

  2. ios开发网络学习AFN框架的使用一:get和post请求

    #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...

  3. 【Heritrix基础教程之1】在Eclipse中配置Heritrix 分类: H3_NUTCH 2014-06-01 00:00 1262人阅读 评论(0) 收藏

    一.新建项目并将Heritrix源码导入 1.下载heritrix-1.14.4-src.zip和heritrix-1.14.4.zip两个压缩包,并解压,以后分别简称SRC包和ZIP包: 2.在Ec ...

  4. Centos6.5 VNC 配置

    VNC 配置 本教程配置说明 目的:实现Window下VNC登陆Linux服务器 本机是在root用户下操作完毕 两台主机已实现基本网络配置,且相互ping通 1. 检查图形界面 确保服务器端须要执行 ...

  5. [CSS] Showing horizontal scrollbar always for the table

    table { display: block; overflow: scroll; width: 200px; height:95vh; }

  6. Android百日程序:GridView实现相冊效果

    本章使用GridView控件来做一个相冊效果. 图片效果例如以下: 响应点击事件,点击的时候提示是当前第几章图片.从左到右,从上到下. 点击了第一张图片,显示了1. 步骤: 一 新建项目,然后把图片资 ...

  7. 数据库使用truncate清理非常多表时碰到外键约束时怎么高速解决

    问题处理思路: 1. 先将数据库中涉及到外键约束的表置为无效状态 2.待清除全然部表数据后再将外键约束的表置为可用状态 详细实现脚本: declare begin for vv_sql in (SEL ...

  8. Android TextView,EditText要求固定行数自动调整TextSize

    最近项目有个需求要求文本最多显示3行,继续输入则字体变小,删除已经输入的文字,那么字体变大,不管变大变小都不能超过3行.网上怎么找也找不到相关的解决方案,自己动手,丰衣足食了! 说一下算法思路,后面给 ...

  9. cannot mount database in EXCLUSIVE mode

    http://blog.csdn.net/xyz846/article/details/6684638

  10. 集群搭建Solr

    Solr集群搭建 SolrCloud需要solr基于zookeeper部署,zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成.由zookeeper来进行协调管理.Zoo ...