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


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

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

    方法一 

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

        @echo off 

        set PATH=C:WINNTSYSTEM32;D:VS.NETVC7BIN;D:VS.NETCOMMON7IDE 

        set INCLUDE=D:VS.NETVC7INCLUDE 

        set LIB=D:VS.NETVC7LIB 

    说明: 

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

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

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

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

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

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

    方法二 

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



    图1 

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

        PATH=C:WINNTSYSTEM32;D:VS.NETVC7BIN;D:VS.NETCOMMON7IDE 

        INCLUDE=D:VS.NETVC7INCLUDE 

        LIB=D:VS.NETVC7LIB   



    图2 

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

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

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

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

        PATH=C:WINNTSYSTEM32;D:VS.NETVC7BIN;D:VS.NETCOMMON7IDE;C:WINNTMI
    CROSOFT.NETFRAMEWORKV1.0.3705;D:VS.NETFRAMEWORKSDKBIN;D:BCC55BIN;E:ORA
    CLEORA81BIN

    三.微软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.0in unit.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:<文件列表> 
     指定要在其中搜索引用的附加目录 
     

    -完-

  • 相关阅读:
    Nginx TCP Proxy模块的编译安装
    树形dp hdu-4616-Game
    UVA 10405 Longest Common Subsequence (dp + LCS)
    MVC中使用EF(2):实现基本的CRUD功能
    [置顶] 关于Qt的学习
    BNU 26480 Horror List【最短路】
    汉语-词语-爱惜:百科
    汉语-词语-珍惜:百科
    汉语-词语-无知:百科
    汉语-词语-愚蠢:百科
  • 原文地址:https://www.cnblogs.com/For-her/p/3899229.html
Copyright © 2020-2023  润新知