C/C++编译器-cl.exe的命令选项

和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰,本文将介绍微软C/C++编译器命令行模式设定和用法。

1、设置环境变量:

PATH=C:\Program Files\Microsoft Visual Studio 8\VC\bin

INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\include

LIB=C:\Program Files\Microsoft Visual Studio 8\VC\lib

如果提示找不到mspdb80.dll文件,则从C:\Program Files\Microsoft Visual Studio 8\Common7\IDE下拷贝“msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe”这四个文件到C:\Program Files\Microsoft Visual Studio 8\VC\bin下即可。

2、命令选项:

1) /C:在预处理输出中保留注释语句

2) /c:只编译,不连接,相当于在"Build"菜单下选择了"Compile"

3) /D:定义常量和宏,与源程序里的#define 有相同效果

4) /E:预处理C、C++源文件,将源文件中所有的预编译指令及宏展开,将注释去掉,然后将预处理器的输出拷贝至标准输出设备输出,并且在每个文件的开头和末尾加入#line

5) /EH:指定编译器用何种异常处理模型

6) /EP:同/E,只是去掉了#line

7) /F:设置程序的堆栈大小

8) /FA:设置生成何种列表文件(汇编、汇编与机器码、汇编与源码、汇编与机器码以及源码)

9) /Fa:指定用/FA设置的列表文件的存放路径及(或)文件名

10)  /FD:生成文件的相互依赖信息

11)  /Fd:设置程序数据库文件(PDB)的存放路径及(或)文件名

12)  /Fe:设置最终可执行文件的存放路径及(或)文件名

13)  /FI:预处理指定的头文件,与源文件中的#include有相同效果

14)  /Fm:创建map文件

15)  /Fo:设置编译后Obj文件的存放路径及(或)文件名

16)  /Fp:设置预编译文件(pch)的存放路径及(或)文件名

17)  /FR:生成浏览信息(sbr)文件

18)  /Fr:同/FR,不同之处在于/Fr不包括局部变量信息

19)  /G3:为80386处理器优化代码生成

20)  /G4:为80486处理器优化代码生成

21)  /G5:为Pentium处理器优化代码生成

22)  /G6:为Pentium Pro处理器优化代码生成

23)  /GA:为Windows应用程序作优化

24)  /GB:为Pentium处理器优化代码生成,使用80386、80486、Pentium、Pentium Pro的混合指令集,是代码生成的默认选项(程序属性选项中Processor对应Blend)

25)  /GD:为Windows动态库(dll)作优化,此开关在VC6中没有实现

26)  /Gd:指定使用__cdecl的函数调用规则

27)  /Ge:激活堆栈检测

28)  /GF:消除程序中的重复的字符串,并将她放到只读的缓冲区中

29)  /Gf:消除程序中的重复字符串

30)  /Gh:在每个函数的开头调用钩子(hook)函数--penter

31)  /Gi:允许渐进编译

32)  /Gm:允许最小化rebuild

33)  /GR:允许运行时类型信息(Run-Time Type Infomation)

34)  /Gr:指定使用__fastcall的函数调用规则

35)  /Gs:控制堆栈检测所用内存大小

36)  /GT:支持用__declspec(thread)分配的数据的fier-safety

37)  /GX:允许同步异常处理,与/EHsc开关等价

38)  /Gy:允许编译器将每一个函数封装成COMDATs的形式,供连接器调用

39)  /GZ:允许在Debug build 的时候捕捉Release build的错误

40)  /Gz:指定使用__stdcall的函数调用规则

41)  /H:限制外部名字的长度

42)  /HELP:列出编译器的所有的命令开关

43)  /I:指定头文件的搜索路径

44)  /J:将char的缺省类型从signed char改成unsigned char

45)  /LD:创建一个动态连接库

46)  /LDd:创建一个Debug版本的动态链接库

47)  /link:将指定的选项传给连接器

48)  /MD:选择多线程、DLL版本的C Run-Time库

49)  /MDd:选择多线程、DLL、Debug版本的C Run-Time库

50)  /ML:选择单线程版本的C Run—Time库

51)  /MLd:选择单线程、Debug版本的C Run—Time库

52)  /MT:选择多线程版本的C Run-Time库

53)  /MTd:选择多线程、Debug版本的C Run—Time库

54)  /nologo:不显示程序的版权信息

55)  /O1:优化使产生的可执行代码最小

56)  /O2:优化使产生的可执行代码速度最快

57)  /Oa:指示编译器程序里没有使用别名,可以提高程序的执行速度

58)  /Ob:控制内联(inline)函数的展开

59)  /Od:禁止代码优化

60)  /Og:使用全局优化

61)  /Oi:用内部函数去代替程序里的函数调用,可以使程序运行的更快,但程序的长度变长

62)  /Op:提高浮点数比较运算的一致性

63)  /Os:产生尽可能小的可执行代码

64)  /Ot:产生尽可能块的可执行代码

65)  /Ow:指示编译器在函数体内部没有使用别名

66)  /Ox:组合了几个优化开关,达到尽可能多的优化

67)  /Oy:阻止调用堆栈里创建帧指针

68)  /Q1f:对核心级的设备驱动程序生成单独的调试信息

69)  /QI0f:对Pentium 0x0f错误指令作修正

70)  /Qifdiv:对Pentium FDIV错误指令作修正

71)  /P:将预处理输出写到指定文件里,文件的后缀名为I

72)  /TC:将命令行上的所有文件都当作C源程序编译,不管后缀名是否为.c

73)  /Tc:将指定的文件当作C源程序编译,不管后缀名是否为.c

74)  /TP:将命令行上的所有文件都当作C++源程序编译,不管后缀名是否为.cpp

75)  /Tp:将指定文件当作C++源程序编译,不管后缀名是否为.cpp

76)  /U:去掉一个指定的前面定义的符号或常量

77)  /u:去掉所有前面定义的符号或常量

78)  /V:在编译的obj文件里嵌入版本号

79)  /vd:禁止/允许构造函数置换

80)  /vmb:选择指针的表示方法,使用这个开关,在声明指向某个类的成员的指针之前,必须先定义这个类

81)  /vmg:选择指针的表示方法,使用这个开关,在声明指向某个类的成员的指针之前,不必先定义这个类,但要首先指定这个类是使用何种继承方法

82)  /vmm:设置指针的表示方法为Single Inheritance and Multiple Inheritance

83)  /vms:设置指针的表示方法为Single Inheritance

84)  /vmv:设置指针的表示方法为Any class

85)  /W:设置警告等级

86)  /w:禁止所有警告

87)  /X:阻止编译器搜索标准的include 目录

88)  /Yc:创建预编译头文件(pch)

89)  /Yd:在所有的obj文件里写上完全的调试信息

90)  /Yu:在build过程中使用指定的预编译头文件

91)  /YX:指示编译器若预编译头文件存在,则使用它,若不存在,则创建一个

92)  /Z7:生成MSC7.0兼容的调试信息

93)  /Za:禁止语言扩展(Microsoft Extensions to C)

94)  /Zd:调试信息只包含外部和全局的符号信息以及行号信息

95)  /Ze:允许语言扩展(Microsoft Extensions to C)

96)  /Zg:为源文件里面定义的每个函数生成函数原型

97)  /ZI:生成程序库文件(Pdb)并支持Edit and Continue调试特性

98)  /Zi:生成程序库文件(pdb),包含类型信息和符号调试信息

99)  /ZL:从obj文件里去掉缺省的库文件名

100)  /Zm:设置编译器的内存分配xianzhi

101)  /Zn:禁止浏览信息文件里面的封装

102)  /Zp:设置结构成员在内存里面的封装格式

103)  /Zs:快速检查语法错误

VC所支持的文件类型

1) DSW:全称是Developer Studio Workspace,最高级别的配置文件,记录了整个工作空间的配置信息,她是一个纯文本的文件,在vc创建新项目的时候自动生成

2) DSP:全称是Developer Studio Project,也是一个配置文件,不过她记录的是一个项目的所有配置信息,纯文本文件

3) OPT:与DSW、DSP配合使用的配置文件,她记录了与机器硬件有关的信息,同一个项目在不同的机器上的opt文件内容是不同的

4) CLW:记录了跟ClassWizard相关的信息,如果丢失了clw文件,那么在Class View面板里就没有类信息

5) PLG:实际上是一个超文本文件,可以用Internet Explorer打开,记录了Build的过程,是一个日志型文件

6) RC:资源描述文件,记录了所有的资源信息,在资源编辑器里作的修改,实际上都是对RC文件的修改

7) RC2:附加的资源描述文件,不能直接资源编辑器修改,只能手工添加,可以用来添加额外的资源

8) RES:经过资源编辑器编译之后的资源文件,以二进制方式存放

9) SBR:编译器生成的浏览信息文件,在代码导航的时候非常有用,她需要在编译时指定/FR或者/Fr开关

10)  BSC:BSCMAKE.EXE将所有的SBR文件作为输入,经过处理之后输出一个BSC文件,在代码导航的时候实际用到的是BSC文件

11)  ILK:当选定渐增型编译连接时,连接器自动生成ILK文件,记录连接信息

12)  PDB:全称是Program DataBase,即程序数据库文件,用来记录调试信息,是一个相当重要的文件,没有他,程序无法正常调试

13)  LIB:如果项目输出是Dll的话,一般会输出一个跟项目同名的Lib文件,记录输出的函数信息

14)  EXP:同Lib,是跟Dll一起生成的输出文件

15)  PCH:全称是PreCompiled Header,就是预先编译好的头文件,在编译时指定/Yu开关时编译器自动生成

C++编译器详解(一)的更多相关文章

  1. Javac编译器详解

    学习<深入了解Java虚拟机>有一段时间了,大概理解了Java从源代码编译到执行出结果的过程,也能明确的知道Java是半解释性语言.在执行源代码时,先通过Javac编译器对源代码进行词法分 ...

  2. Linux安装gcc编译器详解

    本人使用的是CentOS 6.5 64位系统,由于在安装系统的时候并没有勾选安装gcc编译器,因此需要自行安装gcc编译器. 使用yum安装gcc 对于配备了yum的Linux发行版而言,安装gcc编 ...

  3. Linux——CentOS7安装gcc编译器详解

    使用yum安装gcc 使用yum命令安装还是非常easy的. yum -y install gcc gcc-c++ kernel-devel //安装gcc.c++编译器以及内核文件 手动安装gcc ...

  4. C++编译器详解(三)函数调用的区别:_cdecl以及_stdcall

    1._stdcall是Pascal程序的缺省调用方式,通常用于Win32 API中,函数采用从右到左的压栈方式,自己在退出时清空堆栈.VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上&qu ...

  5. C++编译器详解(二)常见precompiling 指令介绍

    VC++编译器中一些常见precompiling 指令介绍 我们在利用vc6.0 project wizard生成的代码中,经常看到大量的precompiling指令.本文讲解了常见的这些指令的作用 ...

  6. Linux——CentOS7安装gcc编译器详解 查看内核版本

    [root@localhost ~]# uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:3 ...

  7. 安装IAR编译器详解

    1.首先下载好安装包和破解包 我安装使用的版本:IAR for 8051 v9.10 链接: https://pan.baidu.com/s/13x36j5qL90YokrAlyChQhw 提取码: ...

  8. Linux 之 编译器 gcc/g++参数详解

    2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++ ...

  9. gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

    摘自http://blog.csdn.net/elfprincexu/article/details/45043971 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解 C和C+ ...

随机推荐

  1. css兼容性写法大全

    淘宝初始化代码 body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset ...

  2. WebApi中Swagger的使用(超级简单)

    Swagger解释 Swagger是一种Rest API的简单但强大的表示方式,她是标准的与语言无关,这种表示方式不但人可读,而且机器可读. 可以作为Rest API的交互式文档,也可以作为Rest ...

  3. YII2中添加自定义模块

    有些时候系统功能过于复杂,这时我们需要通过模块把一些功能区分开来,便于管理与维护. 我用的是Yii2的基本应用程序模板,程序其实已经给我们提供了一个模块,就是app本身.YII2中是可以无限嵌套模块的 ...

  4. FTPserver

    客户端代码: import os import hashlib BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__) ...

  5. sqlserver数据库的分离与附加

    当我们一台电脑上创建了数据库想要转移到另外一台电脑上时,由于数据库处于联机状态,不能够对数据库文件进行复制和迁移,所以我们可以将数据库从服务器上分离出去,这样我们就可以复制数据库文件了.然后将数据库文 ...

  6. select into tb_temp2 from tb_temp1 创建临时表实现上一个、下一个功能,使用完毕就删除临时表

    好久没有写过Sql了,今天遇到一个问题,业务逻辑是: 一个商品可以属于多个分类,在显示商品详情的时候,要求可以点击“上一个”,“下一个” 查看和该商品在同一个分类下的其他商品,商品具有排序号. 这样我 ...

  7. Python使用filetype精确判断文件类型 (文件类型获取)

    filetype.py Small and dependency free Python package to infer file type and MIME type checking the m ...

  8. 初次搭建spring-boot 整合ssm(有许多小坑)

    首先,我是采用官网下载,版本最好选择1.5.16的(这是重点) 下载完毕后,用idea打开解压后的项目. 1.整合spring-mvc 在pom.xml中加入web依赖 <dependency& ...

  9. c中extern的作用

    参考资料: http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html

  10. JSP动作

    JSP动作元素在请求处理阶段起作用,他们会被转换成Java代码来执行操作,如访问一个Java对象或调用方法. JSP动作元素是用XML语法写成的. 动作元素基本上都是预定义的函数,JSP规范定义了一系 ...