分享
 
 
 

C++ Primer学习笔记-转载荣耀先生写的CL编译选项

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

一.微软C/C++编译器命令行模式设定

方法一

1. 参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。

@echo off

set PATH=C:\WINNT\SYSTEM32;D:\VS.NET\VC7\BIN;D:\VS.NET\COMMON7\IDE

set INCLUDE=D:\VS.NET\VC7\INCLUDE

set LIB=D:\VS.NET\VC7\LIB

说明:

a. 以上各环境变量字符串大小写无所谓,但字符之间应避免出现空格。

b. 之所以加上C:\WINNT\SYSTEM32,目的是为了便于使用help之类的扩展命令,和本讨论主题并无直接关系。

2. 打开一个“命令提示符”窗口,执行如下命令:

C:\>start c:\vc7.bat (根据你的文件路径,作出相应修改)

即会创建一个新的“命令提示符”窗口,在这个窗口内,便可进行C++程序编译工作。具体用法,后面再说。

这种设置方法的缺点在于,只能在步骤2新创建的“命令提示符”窗口里进行编译,一旦关闭该窗口,即需要重新执行步骤2。

方法二

1. 在桌面“我的电脑”图标上,单击右键,然后执行“属性”菜单命令,或者,依照“开始”-“设置”-“控制面板”步骤,双击“系统”图标,都会弹出“系统特性”对话框。 选中“高级”页面,点击“环境变量”按钮,即会出现图1所示的环境变量设置窗口。(说明:任何用户都可以增/删/改用户环境变量,但只有管理员才能增/删

/改系统环境变量。对于特定计算机的每个用户来说,用户环境变量可以不相同)

图1

2. 你可以设置为用户环境变量,也可以设置为系统环境变量。参考以下内容,并参见图2所示界面。(根据你系统的情况,作出相应调整)

PATH=C:\WINNT\SYSTEM32;D:\VS.NET\VC7\BIN;D:\VS.NET\COMMON7\IDE

INCLUDE=D:\VS.NET\VC7\INCLUDE

LIB=D:\VS.NET\VC7\LIB

图2

和方法一不同的是,采用这种方式,一旦设置完毕,便可一劳永逸。无需重新启动计算机,现在就打开一个“命令提示符”窗口,执行cl命令试试。

说明:假如你的操作系统是Windows 95/98,可以参照上面描述,直接编辑autoexec.bat文件。

二.Visual C# .NET编译器命令行模式设定

C#编译器命令行模式设定方法大同小异,具体不再赘述,只需在PATH后面加上C:\WINNT\MICROSOFT.NET\FRAMEWORK\V1.0.3705即可。目前我的机器上PATH环境变量设置如下:

PATH=C:\WINNT\SYSTEM32;D:\VS.NET\VC7\BIN;D:\VS.NET\COMMON7\IDE;C:

\WINNT\MI

CROSOFT.NET\FRAMEWORK\V1.0.3705;D:\VS.NET\FRAMEWORKSDK\BIN;D:

\BCC55\BIN;E:\ORA

CLE\ORA81\BIN

三.微软C/C++编译器命令行模式用法

微软C/C++编译器编译选项数目众多,在“命令提示符”窗口键入cl /?即可查看完整列表

(见附录1)。比如说,/GX启用C++异常处理机制,/GR启用C++ RTTI,等等。在此不打算

详细讨论这些编译选项用法。

以下是我的测试目录f:\vstest中的一个样例文件:

//1.cpp

#include <iostream>

using namespace std;

void main()

{

cout << "Hello Royal"<<endl;

}

你现在可以进入该目录执行如下编译命令:

F:\vstest>cl /GX 1.cpp

运行程序,即会产生如下输出:

Hello Royal

编译多个文件也很简单,参见下面例子:

//2.cpp

#include <iostream>

#include "3.cpp"

using namespace std;

void main()

{

CTest ct("Hello www.royaloo.com");

cout << ct.str << endl;

}

//3.cpp

#include <string>

using namespace std;

class CTest

{

public:

CTest(string strValue): str(strValue){}

string str;

};

执行如下编译命令即可:

F:\vstest>cl /GX 2.cpp 3.cpp

也可以这样编译,以指定生成的exe名字:

F:\vstest>cl /GX /FeHello.exe 2.cpp 3.cpp (生成Hello.exe)

运行程序,输出结果如下:

Hello www.royaloo.com

四.Visual C# .NET编译器命令行模式用法

在“命令提示符”窗口键入csc /?即可查看完整编译选项列表(见附录2)。在此

不打算

详细讨论这些编译选项用法。不过,要说明的是,你之所以无需使用/r:编译选项

引用相

关库文件,就可以编译绝大多数程序,原因在于C#编译器默认引用了mscorlib.

dll以及

csc.rsp文件中指定的程序库。该文件内容如下:

# This file contains command-line options that the C#

# command line compiler (CSC) will process as part

# of every compilation, unless the "/noconfig" option

# is specified.

# Reference the common Framework libraries

/r:Accessibility.dll

/r:Microsoft.Vsa.dll

/r:System.Configuration.Install.dll

/r:System.Data.dll

/r:System.Design.dll

/r:System.DirectoryServices.dll

/r:System.dll

/r:System.Drawing.Design.dll

/r:System.Drawing.dll

/r:System.EnterpriseServices.dll

/r:System.Management.dll

/r:System.Messaging.dll

/r:System.Runtime.Remoting.dll

/r:System.Runtime.Serialization.Formatters.Soap.dll

/r:System.Security.dll

/r:System.ServiceProcess.dll

/r:System.Web.dll

/r:System.Web.RegularExpressions.dll

/r:System.Web.Services.dll

/r:System.Windows.Forms.Dll

/r:System.XML.dll

可见,它引用了许多.NET标准库,假如没有充足的理由,就不要修改这个配置文件

但我修改了我机器上的csc.rsp文件,它的尾部多了这两行:

#NUnit is a unit-testing framework for all .Net languages

/r:d:\Nunitv2.0\bin\nunit.framework.dll

注意,文件路径中不可有空格。例如,Nunit2.0默认安装主目录为Nuint v2.0,假

如不做

必要的更改(我改成了Nunitv2.0),将无法成功引用nunit.framework.dll,并将

导致整

个csc命令行编译器无法使用,小心!

假如要取消对mscorlib.dll或csc.rsp引用的话,可以使用/nostdlib或/noconfig

编译选

项。

以下是我的测试目录f:\vstest中的一个样例文件:

//4.cs

using System;

namespace _4

{

class Class1

{

[STAThread]

static void Main(string[] args)

{

Console.WriteLine("Hello Royal");

}

}

}

执行如下编译命令:

F:\vstest>csc 4.cs

运行程序,即输出:

Hello Royal

以下是编译多个文件的例子:

//5.cs

using System;

using _6;

namespace _5

{

class Class5

{

[STAThread]

static void Main(string[] args)

{

Class6 c6 = new Class6("Hello www.royaloo.com");

Console.WriteLine(c6.str);

}

}

}

//6.cs

using System;

namespace _6

{

class Class6

{

public Class6(string strValue) {str = strValue;}

public string str;

}

}

执行如下编译命令:

F:\vstest>csc 5.cs 6.cs

也可以这样编译,以指定生成的exe文件名字:

F:\vstest>csc /out:Hello.exe 5.cs 6.cs

运行程序,即会输出如下字样:

Hello www.royaloo.com

附录一(更详细信息,可查阅MSDN)

微软C/C++ 编译器选项

-优化-

/O1

最小化空间

/Op[-]

改善浮点数一致性

/O2

最大化速度

/Os

优选代码空间

/Oa

假设没有别名

/Ot

优选代码速度

/Ob<n>

内联展开(默认 n=0)

/Ow

假设交叉函数别名

/Od

禁用优化(默认值)

/Ox

最大化选项。(/Ogityb2 /Gs)

/Og

启用全局优化

/Oy[-]

启用框架指针省略

/Oi

启用内部函数

-代码生成-

/G3

为 80386 进行优化

/GH

启用 _pexit 函数调用

/G4

为 80486 进行优化

/GR[-]

启用 C++ RTTI

/G5

为 Pentium 进行优化

/GX[-]

启用 C++ EH(与 /EHsc 相同)

/G6

为 PPro、P-II、P-III 进行优化

/EHs

启用 C++ EH(无 SEH 异常)

/GB

为混合模型进行优化(默认)

/EHa

启用 C++ EH(w/ SEH 异常)

/Gd

__cdecl 调用约定

/EHc

外部“C”默认为 nothrow

/Gr

__fastcall 调用约定

/GT

生成纤维安全 TLS 访问

/Gz

__stdcall 调用约定

/Gm[-]

启用最小重新生成

/GA

为 Windows 应用程序进行优化

/GL[-]

启用链接时代码生成

/Gf

启用字符串池

/QIfdiv[-]

启用 Pentium FDIV 修复

/GF

启用只读字符串池

/QI0f[-]

启用 Pentium 0x0f 修复

/Gy

分隔链接器函数

/QIfist[-]

使用 FIST 而不是 ftol()

/GZ

启用堆栈检查 (/RTCs)

/RTC1

启用快速检查 (/RTCsu)

/Ge

对所有函数强制堆栈检查

/RTCc

转换为较小的类型检查

/Gs[num]

控制堆栈检查调用

/RTCs

堆栈帧运行时检查

/GS

启用安全检查

/RTCu

未初始化的本地用法检查

/Gh

启用 _penter 函数调用

/clr[:noAssembly]

为公共语言运行时库编译noAssembly - 不产生程序集

-输出文件-

/Fa[file]

命名程序集列表文件

/Fo<file>

命名对象文件

/FA[sc]

配置程序集列表

/Fp<file>

命名预编译头文件

/Fd[file]

命名 .PDB 文件

/Fr[file]

命名源浏览器文件

/Fe<file>

命名可执行文件

/FR[file]

命名扩展 .SBR 文件

/Fm[file]

命名映射文件

-预处理器-

/AI<dir>

添加到程序集搜索路径

/Fx

将插入的代码合并到文件

/FU<file>

强制使用程序集/模块

/FI<file>

命名强制包含文件

/C

不抽出注释

/U<name>

移除预定义宏

/D<name>{=|#}<text>

定义宏

/u

移除所有预定义宏

/E

预处理到 stdout

/I<dir>

添加到包含搜索路径

/EP

预处理到 stdout,没有 #line

/X

忽略“标准位置”

/P

预处理到文件

-语言-

/Zi

启用调试信息

/Zl

忽略 .OBJ 中的默认库名

/ZI

启用“编辑并继续”调试信息

/Zg

生成函数原型

/Z7

启用旧式调试信息

/Zs

只进行语法检查

/Zd

仅有行号调试信息

/vd{0|1}

禁用/启用 vtordisp

/Zp[n]

在 n 字节边界上包装结构

/vm<x>

指向成员的指针类型

/Za

禁用扩展(暗指 /Op)

/noBool

禁用“bool”关键字

/Ze

启用扩展(默认)

/Zc:arg1[,arg2]

C++ 语言一致性,这里的参数可以是:forScope - 对范围规则强制使用标准

C++;

wchar_t - wchar_t 是本机类型,不是 typedef

- 杂项 -

@<file>

选项响应文件

/wo<n>

发出一次警告 n

/?, /help

打印此帮助消息

/w<l><n>

为 n 设置警告等级 1-4

/c

只编译,不链接

/W<n>

设置警告等级(默认 n=1)

/H<num>

最大外部名称长度

/Wall

启用所有警告

/J

默认 char 类型是 unsigned

/Wp64

启用 64 位端口定位警告

/nologo

取消显示版权消息

/WX

将警告视为错误

/showIncludes

显示包含文件名

/WL

启用单行诊断

/Tc<source file>

将文件编译为 .c

/Yc[file]

创建 .PCH 文件

/Tp<source file>

将文件编译为 .cpp

/Yd

将调试信息放在每个 .OBJ 中

/TC

将所有文件编译为 .c

/Yl[sym]

为调试库插入 .PCH 引用

/TP

将所有文件编译为 .cpp

/Yu[file]

使用 .PCH 文件

/V<string>

设置版本字符串

/YX[file]

自动 .PCH

/w

禁用所有警告

/Y-

禁用所有 PCH 选项

/wd<n>

禁用警告 n

/Zm<n>

最大内存分配(默认为 %)

/we<n>

将警告 n 视为错误

-链接-

/MD

与 MSVCRT.LIB 链接

/MDd

与 MSVCRTD.LIB 调试库链接

/ML

与 LIBC.LIB 链接

/MLd

与 LIBCD.LIB 调试库链接

/MT

与 LIBCMT.LIB 链接

/MTd

与 LIBCMTD.LIB 调试库链接

/LD

创建 .DLL

/F<num>

设置堆栈大小

/LDd

创建 .DLL 调试库

/link

[链接器选项和库]

附录二(更详细信息,可查阅MSDN)

Visual C# .NET 编译器选项

- 输出文件 -

/out:<文件>

输出文件名(默认值:包含主类的文件或第一个文件的基名称)

/target:exe

生成控制台可执行文件(默认) (缩写: /t:exe)

/target:winexe

生成 Windows 可执行文件 (缩写: /t:winexe)

/target:library

生成库 (缩写: /t:library)

/target:module

生成能添加到其他程序集的模块 (缩写: /t:module)

/define:<符号列表>

定义条件编译符号 (缩写: /d)

/doc:<文件>

要生成的 XML 文档文件

- 输入文件 -

/recurse:<通配符>

根据通配符规范,包括当前目录和子目录下的所有文件

/reference:<文件列表>

从指定的程序集文件引用元数据 (缩写: /r)

/addmodule:<文件列表>

将指定的模块链接到此程序集中

- 资源 -

/win32res:<文件>

指定 Win32 资源文件 (.res)

/win32icon:<文件>

使用该图标输出

/resource:<资源信息>

嵌入指定的资源 (缩写: /res)

/linkresource:<资源信息>

将指定的资源链接到此程序集中 (缩写: /linkres)

- 代码生成 -

/debug[+|-]

发出调试信息

/debug:{full|pdbonly}

指定调试类型(“full”是默认类型,可以将调试程序附加到正在运行的程序)

/optimize[+|-]

启用优化 (缩写: /o)

/incremental[+|-]

启用增量编译 (缩写: /incr)

- 错误和警告 -

/warnaserror[+|-]

将警告视为错误

/warn:<n>

设置警告等级 (0-4) (缩写: /w)

/nowarn:<警告列表>

禁用特定的警告消息

- 语言 -

/checked[+|-]

生成溢出检查

/unsafe[+|-]

允许“不安全”代码

- 杂项 -

@<文件>

读取响应文件以获得更多选项

/help

显示此用法信息 (缩写: /?)

/nologo

取消编译器版权信息

/noconfig

不要自动包含 CSC.RSP 文件

- 高级 -

/baseaddress:<地址>

要生成的库的基址

/bugreport:<文件>

创建一个“错误报告”文件

/codepage:<n>

指定打开源文件时要使用的代码页

/utf8output

UTF-8 编码的输出编译器消息

/main:<类型>

指定包含入口点的类型(忽略所有其他可能的入口点) (缩写: /m)

/fullpaths

编译器生成完全限定路径

/filealign:<n>

/filealign:<n>

指定用于输出文件节的对齐方式

/nostdlib[+|-]

不引用标准库 (mscorlib.dll)

/lib:<文件列表>

指定要在其中搜索引用的附加目录

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有