您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > C++编译器命令行模式设置技巧
微软C/C++/C#编译器命令行模式设定和用法微软C/C++/C#编译器命令行模式设定和用法和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰。本文将介绍微软C/C++/C#编译器命令行模式设定和用法。操作系统为Windows2000。一.微软C/C++编译器命令行模式设定方法一1.参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。@echooffsetPATH=C:\WINNT\SYSTEM32;D:\VS.NET\VC7\BIN;D:\VS.NET\COMMON7\IDEsetINCLUDE=D:\VS.NET\VC7\INCLUDEsetLIB=D:\VS.NET\VC7\LIB说明:a.以上各环境变量字符串大小写无所谓,但字符之间应避免出现空格。b.之所以加上C:\WINNT\SYSTEM32,目的是为了便于使用help之类的扩展命令,和本讨论主题并无直接关系。2.打开一个“命令提示符”窗口,执行如下命令:C:\startc:\vc7.bat(根据你的文件路径,作出相应修改)即会创建一个新的“命令提示符”窗口,在这个窗口内,便可进行C++程序编译工作。具体用法,后面再说。这种设置方法的缺点在于,只能在步骤2新创建的“命令提示符”窗口里进行编译,一旦关闭该窗口,即需要重新执行步骤2。方法二1.在桌面“我的电脑”图标上,单击右键,然后执行“属性”菜单命令,或者,依照“开始”-“设置”-“控制面板”步骤,双击“系统”图标,都会弹出“系统特性”对话框。选中“高级”页面,点击“环境变量”按钮,即会出现图1所示的环境变量设置窗口。(说明:任何用户都可以增/删/改用户环境变量,但只有管理员才能增/删/改系统环境变量。对于特定计算机的每个用户来说,用户环境变量可以不相同)图12.你可以设置为用户环境变量,也可以设置为系统环境变量。参考以下内容,并参见图2所示界面。(根据你系统的情况,作出相应调整)PATH=C:\WINNT\SYSTEM32;D:\VS.NET\VC7\BIN;D:\VS.NET\COMMON7\IDEINCLUDE=D:\VS.NET\VC7\INCLUDELIB=D:\VS.NET\VC7\LIB图2和方法一不同的是,采用这种方式,一旦设置完毕,便可一劳永逸。无需重新启动计算机,现在就打开一个“命令提示符”窗口,执行cl命令试试。说明:假如你的操作系统是Windows95/98,可以参照上面描述,直接编辑autoexec.bat文件。二.VisualC#.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#includeiostreamusingnamespacestd;voidmain(){coutHelloRoyalendl;}你现在可以进入该目录执行如下编译命令:F:\vstestcl/GX1.cpp运行程序,即会产生如下输出:HelloRoyal编译多个文件也很简单,参见下面例子://2.cpp#includeiostream#include3.cppusingnamespacestd;voidmain(){CTestct(Hello);coutct.strendl;}//3.cpp#includestringusingnamespacestd;classCTest{public:CTest(stringstrValue):str(strValue){}stringstr;};执行如下编译命令即可:F:\vstestcl/GX2.cpp3.cpp也可以这样编译,以指定生成的exe名字:F:\vstestcl/GX/FeHello.exe2.cpp3.cpp(生成Hello.exe)运行程序,输出结果如下:Hello四.VisualC#.NET编译器命令行模式用法在“命令提示符”窗口键入csc/?即可查看完整编译选项列表(见附录2)。在此不打算详细讨论这些编译选项用法。不过,要说明的是,你之所以无需使用/r:编译选项引用相关库文件,就可以编译绝大多数程序,原因在于C#编译器默认引用了mscorlib.dll以及csc.rsp文件中指定的程序库。该文件内容如下:#Thisfilecontainscommand-lineoptionsthattheC##commandlinecompiler(CSC)willprocessaspart#ofeverycompilation,unlessthe/noconfigoption#isspecified.#ReferencethecommonFrameworklibraries/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文件,它的尾部多了这两行:#NUnitisaunit-testingframeworkforall.Netlanguages/r:d:\Nunitv2.0\bin\nunit.framework.dll注意,文件路径中不可有空格。例如,Nunit2.0默认安装主目录为Nuintv2.0,假如不做必要的更改(我改成了Nunitv2.0),将无法成功引用nunit.framework.dll,并将导致整个csc命令行编译器无法使用,小心!假如要取消对mscorlib.dll或csc.rsp引用的话,可以使用/nostdlib或/noconfig编译选项。以下是我的测试目录f:\vstest中的一个样例文件://4.csusingSystem;namespace_4{classClass1{[STAThread]staticvoidMain(string[]args){Console.WriteLine(HelloRoyal);}}}执行如下编译命令:F:\vstestcsc4.cs运行程序,即输出:HelloRoyal以下是编译多个文件的例子://5.csusingSystem;using_6;namespace_5{classClass5{[STAThread]staticvoidMain(string[]args){Class6c6=newClass6(Hello);Console.WriteLine(c6.str);}}}//6.csusingSystem;namespace_6{classClass6{publicClass6(stringstrValue){str=strValue;}publicstringstr;}}执行如下编译命令:F:\vstestcsc5.cs6.cs也可以这样编译,以指定生成的exe文件名字:F:\vstestcsc/out:Hello.exe5.cs6.cs运行程序,即会输出如下字样:Hello附录一(更详细信息,可查阅MSDN)微软C/C++编译器选项-优化-/O1最小化空间/Op[-]改善浮点数一致性/O2最大化速度/Os优选代码空间/Oa假设没有别名/Ot优选代码速度/Obn内联展开(默认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[-]启用PentiumFDIV修复/GF启用只读字符串池/QI0f[-]启用Pentium0x0f修复/Gy分隔链接器函数/QIfist[-]使用FIST而不是ftol()/GZ启用堆栈检查(/RTCs)/RTC1启用快速检查(/RTCsu)/Ge对所有函数强制堆栈检查/RTCc转换为较小的类型检查/Gs[num]控制堆栈检查调用/RTCs堆栈帧运行时检查/GS启用安全检查/RTCu未初始化的本地用法检查/Gh启用_penter函数调用/clr[:noAssembly]为公共语言运行时库编译noAssembly-不产生程序集-输出文件-/Fa[file]命名程序集列表文件/Fofile命名对象文件/FA[sc]配置程序集列表/Fpfile命名预编译头文件/Fd[file]命名.PDB文件/Fr[file]命名源浏览器文件/Fefile命名可执行文件/FR[file]命名扩展.SBR文件/Fm[file]命名映射文件-预处理器-/AIdir添加到程序集搜索路径/Fx将插入的代码合并到文件/FUfile强制使用程序集/模块/FIfile命名强制包含文件/C不抽出注释/Uname移除预定义宏/Dname{=|#}text定义宏/u移除所有预定义宏/E预处理到stdout/Idir添加到包含搜索路径/EP预处理到stdout,没有#line/X忽略“标准位置”/P预处理到文件-语言-/Zi启用调试信息/Zl忽略.OBJ
本文标题:C++编译器命令行模式设置技巧
链接地址:https://www.777doc.com/doc-3376752 .html