微软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之类的

 

扩展命令,和本讨论主题并无直接关系。 

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
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/MICROSOFT.NET/FRAMEWORK/V1.0.3705;D:/VS.NET/FRAMEWORKSDK/BIN;D:/BCC55/BIN;E:/ORACLE/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  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值