cl.exe所在文件夹里有一个批处理,叫VSVAR32.BAT
首先运行一次,您可以使用 cl.exe 来编译您的代码。
(vs2005中没有找到这个文件,怀疑是上层目录的vcvarsall.bat,不过不执行这个文件,命令行编译也可以。)
CL.exe 是一个 32 位工具,用于控制 Microsoft C 和 C++ 编译器和链接器。编译器生成通用对象文件格式 (COFF) 对象 (.obj) 文件。链接器生成可执行文件 (.exe) 或动态链接库文件 (DLL)。
请注意,所有编译器选项均区分大小写。
要编译但不链接,请使用 /c。
使用NMAKE生成输出文件。
支持使用 BSCMAKE 进行课程浏览。
以下是编译器选项的完整分类列表。
优化
选项功能
/O1 创建小代码
/O2 创建快速代码
/Oa 假设没有别名
/Ob 控制内联扩展
/Od 禁用优化
/Og 使用全局优化
/Oi 生成内部函数
/Op 提高浮点一致性
/Os 代码大小优先级
/Ot 码速度优先
/Ow 假定在函数调用中使用别名
/Ox 使用最大优化 (/Ob1gity /Gs)
/Oy 省略帧指针
代码生成
选项功能
/clr 启用 C++ 托管扩展并生成在公共语言运行时上运行的输出文件
/EH 指定异常处理模型
/G3 优化代码以支持 386 处理器。在 Visual C++ 5.0 中已弃用,编译器会忽略此选项
/G4 优化代码以支持 486 处理器。在 Visual C++ 5.0 中已弃用,编译器会忽略此选项
/G5 优化代码以支持 Pentium
/GB 相当于 /G6;将 _M_IX86 的值设置为 600
/Gd 使用 __cdecl 调用约定
/Ge 激活堆栈探测
/GF
/GF 启用字符串池
/GH 调用钩子函数_penter
/GH 调用钩子函数_pexit
/GL 启用完整的程序优化
/Gm 实现最小程度的再生
/Gr 启用运行时类型信息 (RTTI)
/Gr 使用 __fastcall 调用约定
/GS 控制堆栈探测
/GT 支持使用静态线程本地存储分配的数据的光纤安全性
/GX 启用同步异常处理
/Gy 支持功能级链接
/GZ 使用 __stdcall 调用约定
/MD 使用 MSVCRT.lib 创建多线程 DLL
/MDd 使用 MSVCRTD.lib 创建调试多线程 DLL
/ML 使用 LIBC.lib 创建单线程可执行文件
/MLd 使用 LIBCD.lib 创建调试单线程可执行文件
/MT 使用LIBCMT.lib创建多线程可执行文件
/MTd 使用 LIBCMTD.lib 创建调试多线程可执行文件
输出文件
选项功能
/FA
/FA 创建装配文件
设置列表文件名
/Fd 重命名程序数据库文件
/Fe 重命名可执行文件
/Fm 创建映射文件
/Fo 创建目标文件
/Fp 指定预编译头文件名
/FR
/FR 生成浏览器文件
/Fx 将插入的代码与源文件合并
调试
选项功能
/GS 缓冲区安全检查
/GZ 与 /RTC1 相同
/RTC 启用运行时错误检查
/Wp64 检测 64 位可移植性问题
/Yd 将完整的调试信息放入所有目标文件中
/Yl 创建调试库时插入 PCH 参考
/Z7 生成与 C 7.0 兼容的调试信息
/Zd 生成行号
/Zi 生成完整的调试信息
预处理器
选项功能
/AI 指定解析传递给 #using 指令的文件引用时要搜索的目录
/c 在预处理期间保留注释
/D 定义常量和宏
/E 将预处理器输出复制到标准输出
/EP 将预处理器输出复制到标准输出
/Fl 预处理指定的包含文件
/FU 强制使用文件名,就好像它已传递给 #using 指令
/I 搜索包含文件的目录
/P 将预处理器输出写入文件
/U 删除预定义宏
/U 删除所有预定义宏
/X 忽略标准包含目录
/ZI 将调试信息包含在与“编辑并继续”兼容的程序数据库中
语言
选项功能
/noBool 取消 C++ bool、true 和 false 关键字
/vd 禁用或启用隐藏的 vtordisp 类成员
/vmb 使用指向成员的最佳基址
/vmg 使用指向成员的指针的完整通用性
/vmm 声明多重继承
/vms 声明单一继承
/vmv 声明虚拟继承
/Za 禁用语言扩展
/Zc 指定 /Ze 下的标准行为
/Ze 启用语言扩展
/Zg 生成函数原型
/Zl 从 .obj 文件中删除默认库名称
/Zp n 封装结构件
/Zs 仅检查语法
链接
选项功能
/F 设置堆叠大小
/LD 创建动态链接库
/LDd 创建调试动态链接库
/link 将指定选项传递给 LINK
/MD 使用 MSVCRT.lib 编译,创建多线程 DLL
/MDd 使用 MSVCRTD.lib 编译,创建调试多线程 DLL
/ML 使用 LIBC.lib 编译以创建单线程可执行文件
/MLd 使用 LIBCD.lib 编译以创建调试单线程可执行文件
/MT 使用 LIBCMT.lib 编译以创建多线程可执行文件
/MTd 使用 LBCMTD.lib 编译以创建调试多线程可执行文件
预编译头
选项功能
/Y - 忽略当前构建中的所有其他预编译头编译器选项
/Yc 创建预编译头文件
/Yd 将完整的调试信息放入所有目标文件中
/Yu 在构建过程中使用预编译头
/YX 自动处理预编译头
其他
选项功能
@ 指定响应文件
/?列出编译器选项
/c 编译但不链接
/H 限制外部(公共)名称的长度
/HELP 列出编译器选项
/J 更改默认字符类型
/NOLOGO 取消登录版权标志的显示
/QI0f 确保 Pentium 0F 指令没有问题
/QIfdiv 针对 FDIV、FPREM、FPTAN 和 FPATAN 指令有缺陷的 Intel Pentium 微处理器的解决方法
当需要从浮点类型转换为整数时,QIfist 取消对辅助函数 _ftol 的调用
/showInincludes 显示编译期间所有包含文件的列表
/Tc
/Tc 指定 C 源文件
/Tp
/Tp 指定 C++ 源文件
/V 设置版本字符串
/w 设置警告级别
/w 禁用所有警告
/Wall 启用所有警告,包括默认禁用的警告
/WL 从命令行编译 C++ 源代码时启用错误和警告消息的单行诊断
/Zm 设置编译器的内存分配限制
CL 命令行使用以下语法:
CL [选项...] 文件... [选项|文件]... [lib...] [@command-file] [/link 链接选项...]
CL 命令的输入项目的含义如下表
选项 一个或多个 CL 选项。请注意,所有选项都适用于所有指定的源文件。选项由正斜杠 (/) 或破折号 (–) 指定。如果选项采用参数,则该选项的规范指定选项和参数之间是否允许有空格。选项名称(/HELP 选项除外)区分大小写。有关详细信息,请参阅 CL 选项的顺序。
文件 一个或多个源文件、.obj 文件或库的名称。 CL 编译源文件并将 .obj 文件和库的名称传递给链接器。有关详细信息,请参阅 CL 文件名语法。
lib 一个或多个库名称。 CL 将这些名称传递给链接器。
命令文件 包含多个选项和文件名的文件。有关详细信息,请参阅 CL 命令文件。
link-opt 一个或多个链接器选项。 CL 将这些选项传递给链接器。
您可以指定任意数量的选项、文件名和库名称,只要命令行上的字符数不超过 1024(操作系统指定的限制)。
CL命令文件请参见
设置编译器选项 |编译器选项
命令文件是一个文本文件,其中包含您在命令行上键入或使用 CL 环境变量指定的选项和文件名。 CL 接受编译器命令文件作为 CL 环境变量或命令行中的参数。与命令行或 CL 环境变量不同,命令文件允许多行选项和文件名。
命令文件中的选项和文件名将根据命令文件名在 CL 环境变量或命令行中的位置进行处理。但是,如果 /link 选项出现在命令文件中,则该行其余部分中的所有选项都将传递给链接器。命令文件后面的行以及调用命令文件后命令行上的选项仍然被接受为编译器选项。
命令文件不得包含 CL 命令。每个选项必须在同一行开始和结束;您不能使用反斜杠 (") 跨行组合选项。
命令文件由 @ 字符后跟文件名指定;文件名可以指定绝对路径或相对路径。
VS很聪明,F7完成了预处理、编译、链接的所有工作。但当项目比较大,使用的文件模块较多时,一旦出现编译错误,定位编译错误就会比较困难。因此,有时需要单独编译各个模块,就像Linux下编写的makefile一样,单独编译各个.o目标文件,然后链接成.exe可执行程序。总结一下VS下使用命令行单独编译程序的方法。
dos下编译必备环境配置要求:
1.找到vs的cl.exe所在目录。在vs2010中是F:\visual 2010\VC\bin,供参考。
2、点击“我的电脑”配置环境变量,找到“path”变量,添加分号,添加刚才的路径。
3.重新运行cmd打开新的命令窗口,输入cl查看路径设置是否生效。 (只需配置一次,再次运行时无需再次运行该命令)。
4. 输入 vcvars32。该命令是在同一路径下运行vcvars32.bat来设置其环境变量。
5、输入cl hello.cpp即可正常编译。
?
?
下面总结了一些常用的命令: VS 的命令行界面可以通过快捷方式 Visual Studio Command Prompt (2010) 打开。 (1) 在命令行提示符窗口中输入:cl??/????或 ???cl -help 查看 cl 所有命令选项。 (2)默认情况下,cl编译后会自动调用link进行链接。您可以使用 /c 选项来阻止链接。 (3)编译文件命令:cl /FeMyapp 1.cpp,然后输入程序名Myapp执行程序。 (注意1.h是本地的,可以通过/I选项指定头文件路径) (4)编译多个文件使用命令:cl /FeMyapp 1.cpp 2.cpp 3.cpp,然后进入程序命名为Myapp来执行该程序。 (5)只输出.i预编译文件命令:cl /FiA /P A.cpp,就会生成A.i预编译文件。该方法类似于Linux下的gcc -E A.cpp -o A.i命令。该命令的主要目的是检查未定义情况下的错误。 ? (6)只输出.o目标文件命令:cl /FoA /c A.cpp,就会生成A.obj目标文件,类似于Linux下的.o文件。请注意,应将 /c 选项带至此处。其原因如(2)所示。也就是说,默认情况下,cl会自动链接编译后的目标文件。如果此时编译的目标文件引用了其他目标文件中的符号,就会出现链接错误。 ?
?
参考网址:http://www.sychzs.cn/question/184905864vs2010 使用命令行编译的方法(2012-03-29 10:45:25)转载▼标签:vs命令行讲分类:vs VS do它非常聪明。一个F7就完成了预处理、编译、链接的全部工作。但当项目比较大,使用的文件模块较多时,一旦出现编译错误,定位编译错误就会比较困难。因此,有时需要单独编译各个模块,就像Linux下编写的makefile一样,单独编译各个.o目标文件,然后链接成.exe可执行程序。总结一下VS下使用命令行单独编译程序的方法。 dos下编译前提环境配置要求: 1、找到vs的cl.exe所在目录。在vs2010中是F:\visual 2010\VC\bin,供参考。 2、点击“我的电脑”配置环境变量,找到“path”变量,添加分号,添加刚才的路径。 3.重新运行cmd打开新的命令窗口,输入cl检查路径设置是否生效。 (只需配置一次,再次运行时无需再次运行该命令)。 4. 输入 vcvars32。该命令是在同一路径下运行vcvars32.bat来设置其环境变量。 5、输入cl hello.cpp即可正常编译。 ? ?下面总结了一些常用的命令: VS的命令行界面可以通过快捷方式Visual Studio Command Prompt (2010)打开。 (1) 在命令行提示符窗口中输入:cl ?/? ?或者 ? cl -help 查看cl所有命令选项。 (2)默认情况下,cl编译后会自动调用link进行链接。您可以使用 /c 选项来阻止链接。 (3)编译文件命令:cl /FeMyapp 1.cpp,然后输入程序名Myapp执行程序。 (注意1.h是本地的,可以通过/I选项指定头文件路径) (4)编译多个文件使用命令:cl /FeMyapp 1.cpp 2.cpp 3.cpp,然后进入程序命名为Myapp来执行该程序。 (5)只输出.i预编译文件命令:cl /FiA /P A.cpp,就会生成A.i预编译文件。该方法与Linux下的?gcc -E A.cpp -o A.i命令类似。该命令的主要作用是检查是否定义情况的错误。 ? (6)只输出.o目标文件命令:cl /FoA /c A.cpp,就会生成A.obj目标文件,类似于Linux下的.o文件。请注意,应将 /c 选项带至此处。其原因如(2)所示。也就是说,默认情况下,cl会自动链接编译后的目标文件。如果此时编译的目标文件引用了其他目标文件中的符号,就会出现链接错误。 ? ?参考网址:http://www.sychzs.cn/question/184905864
VS构建工具介绍
我们都知道,为了从C/C++源代码生成可执行的.exe程序,需要经过预处理、编译和链接的过程。在VS工具中,只需要选择菜单Build或者点击F即可编译生成我们的可执行程序exe文件。事实上,IDE 帮助我隐藏了很多具体细节。
打开VS2010安装目录,打开VC\bin,可以看到一系列可执行程序.exe和批处理文件。这些是构建、编译和链接 VS2010 时使用的工具。看看几个主要工具:
cl.exe:编译器
link.exe:链接器
lib.exe:加载lib库的程序
nmake.exe:使用makefile构建和编译的工具
dumpbin.exe:查看dll或exe的依赖库
命令行编译器
这里有两种方法。一种是配置系统环境变量然后在系统命令窗口执行,另一种是直接在vs中打开Visual Studio命令提示符
?
其实第二种方法是通过第一种方法(执行vsvars32.bat)得到的。如果您有兴趣,可以了解一下。
CL.EXE测试
#include #include int main()
{
st