微软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:<文件列表>
指定要在其中搜索引用的附加目录
相关推荐
为什么很少听到C++03标准编译器?C++编译器。Java语言不同类型编译器?C/C++编译器和支持标准。
从上世纪50年代开始,编程语言五花八门,编译器和解释器层出不穷。此处只列出常见编程语言的编译器和解释器信息,不常见的编程语言有单独文章介绍。
C++ Primer学习笔记-vc7.1 cl 编译选项
和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰。本文将介绍微软C/C++/C#编译器命令行模式设定和用法。操作系统为Windows 2000。一.微软C/C++编译器命令行模式设定方法一1. 参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。 @echo off set PATH=C:/WIN
C#调用C++ DLL实战:C++/CLI桥接方案详解与避坑指南
在Windows平台软件开发中,托管语言(如C#)与非托管原生代码(如C++)的互操作是常见需求,尤其在需要复用高性能算法库或硬件驱动时。其核心原理是通过特定的“桥梁”技术,在公共语言运行时(CLR)与本地运行时之间进行数据类型转换和内存管理,从而实现跨语言调用。这项技术的核心价值在于能最大化利用现有C++代码资产,避免重写成本,同时为C#应用程序注入原生性能。典型的应用场景包括工业控制、游戏引擎、音视频处理等对计算性能要求较高的领域。本文聚焦于**C++/CLI**这一强大方案,通过构建托管包装器,自然封
C++ Primer学习笔记-转载荣耀先生写的CL编译选项
和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰。本文将介绍微软C/C++/C#编译器命令行模式设定和用法。操作系统为Windows 2000。一.微软C/C++编译器命令行模式设定方法一1. 参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。 @echo off set PATH=C:/WIN
C++调用C# DLL的三种主流方案:COM、C++/CLI与NativeAOT
在软件工程中,跨语言互操作(Interop)是解决异构系统集成的关键技术,它允许不同编程语言和运行时环境之间进行通信与协作。其核心原理在于定义清晰的二进制接口(ABI)或通过中间层进行数据编组(Marshaling),以协调内存管理、类型系统等差异。这项技术的价值在于能够复用现有代码库,显著降低开发成本与风险,尤其适用于工业软件、游戏引擎插件等需要融合高性能本地代码与快速迭代托管代码的场景。本文聚焦于C++与C#之间的互操作,深入探讨了包括C++/CLI桥接与NativeAOT在内的主流方案,为面临类似【遗
Python 和 Java、PHP、C、C#、C++等其他语言的对比?
’’1.C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言。C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。
Win下命令行编译环境
和在IDE中编译相比,命令行模式编译速度更快,并可以避免被IDE产生的一些附加信息所干扰。本文将介绍微软C/C++/C#编译器命令行模式设定和用法。操作系统为Windows 2000。 一.微软C/C++编译器命令行模式设定 方法一 1. 参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。 @echo of
Visual Studio中C++/CLI项目创建与配置实战指南
C++/CLI是微软推出的混合编程技术,它允许开发者在.NET公共语言运行时(CLR)上运行C++代码,实现托管与非托管代码的互操作。其核心原理是通过/clr编译器开关将C++代码编译为托管中间语言(IL)和原生代码的混合体,在保留C++底层控制能力的同时,无缝调用.NET框架的丰富类库。这项技术的价值在于能够桥接高性能原生C++模块与现代化的C#应用程序,特别适用于需要将遗留C++代码集成到WPF、WinForms等.NET桌面应用中的场景。在Visual Studio中配置C++/CLI项目时,需注意正
[C++/CLI编程宝典][2]什么是C++/CLI语言
对于什么是C++/CLI,我们首先可以简单的将其名字划分为两部分来理解,第一,C++,我们熟悉的目前被广泛使用的面向对象的ISO国际标准的高级语言,也称为ISOC++,我们这里以后均称其为ISOC++;第二,CLI,我们可以认为是对ISOC++在CLI上扩展。CLI是通用语言框架的缩写,微软的.NET就是架构在CLI其上,虽然CLI现在也是ISO标准,但是C++/CLI并不是ISOC++委员会对其
【自然语言处理(NLP)实战】LSTM网络实现中文文本情感分析(手把手与教学超详细)
在当今数字化时代,人们在社交媒体、评论平台以及各类在线交流中产生了海量的文本数据。这些数据蕴含着丰富的情感信息,从而成为了深入理解用户态度、市场趋势,甚至社会情绪的宝贵资源。自然语言处理(NLP)的发展为我们提供了强大的工具,使得对文本情感进行分析成为可能。在这个领域中,长短时记忆网络(LSTM)凭借其能够捕捉文本序列中长距离依赖关系的能力,成为了情感分析任务中的一项重要技术。通过详细的步骤和示例代码,深入了解如何处理中文文本数据、构建LSTM模型、进行训练和评估。
从光耦隔离到稳定驱动:信捷伺服与STM32的硬件设计陷阱与救赎
本文深入探讨了信捷伺服驱动器与STM32微控制器配合时的硬件设计关键问题,包括光耦隔离电路选型、电源电压选择、拨码开关设置等核心环节。针对伺服驱动器的稳定驱动需求,提供了从电路设计到抗干扰策略的完整解决方案,帮助工程师规避常见陷阱,提升工业控制系统的可靠性。
微软编程标准规范实战指南:C++/C#代码质量提升与团队协作优化
在软件开发领域,编码规范是保障代码质量、提升团队协作效率的基础工程实践。其核心原理在于通过统一的命名规则、代码格式和设计原则,建立团队共同遵守的技术契约,从而减少认知负荷与沟通成本。从技术价值看,规范的代码不仅提升了可读性与可维护性,更是预防内存泄漏、空指针异常等常见缺陷的第一道防线,尤其在Windows平台C++/VC和C#开发中,对资源管理和异步编程等关键环节的约束至关重要。在实际应用场景中,规范需融入开发全流程,结合静态分析工具与代码审查,确保从个人习惯到系统架构的一致性。本文聚焦于微软生态下的编程标
车辆动力学从入门到进阶之路(传统篇)
新手如何入门车辆动力学开发领域,本文为您引路!
C++/CLI编程一些基本概念
C++/CLI编程一些基本概念 这里列举了一些我认为C++/CLI编程的需要知道一些基本概念 非安全代码(Unsafe code):一般而言,用VB.NET, C#编译成的代码是安全代码,这里的安全是指编译器本身的能力而言。比如对同样的一个C#程序,如果使用/u...
Obsidian+llama3:终于搭建了自己的知识库
Obsidian 的 Smart Connections,超出了我原本的预期,于是结合新模型非常方便地搭建了我的个人知识库。
【Lammps】MS将cif通过msi2lmp.exe转为data文件
在Materials Studio中打开cif文件,在Modules工具行选择Forcite>calculation>Energy中选用cvff力场,点击more,不要运行run,在more中取消勾选calculate automatically,点击calculate,然后叉掉后在file>export导出car文件,同步生成了mdf文件。对于MS中没有的立场,选择之后点calculate会报错,右键选择label,然后根据Forcite选择原子,会发现有力场的有标号,没有力场的MS没有对选择标号。
1163



被折叠的 条评论
为什么被折叠?



