微软C/C++/C#编译器命令行模式设定和用法

12 篇文章 0 订阅

微软C/C++/C#编译器命令行模式设定和用法   


和在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:/W
INNT/MICROSOFT.NET/FRAMEWORK/V1.0.3705即可。目前我的机器上PATH环境变量设置  
如下:   

    
PATH=C:/WINNT/SYSTEM32;D:/VS.NET/VC7/BIN;D:/VS.NET/COMMON7/IDE;C:/WINNT/MICRO
SOFT.NET/FRAMEWORK/V1.0.3705;D:/VS.NET/FRAMEWORKSDK/BIN;D:/BCC55/BIN;E:/ORACL
E/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>   
指定用于输出文件节的对齐方式   
  
/nostdlib[+|-]   
不引用标准库 (mscorlib.dll)   
  
/lib:<文件列表>   
指定要在其中搜索引用的附加目录    
  

 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值