有些时候使用命令行而不是IDE去编译源代码会比较方便。
而在命令行下使用msvc的编译器——cl, 需要为其配置环境。
一、 环境变量测试
测试cl的环境是否配置妥当, 可以执行如下测试:
win键+R 启动运行 -> 输入cmd(winnt系列)或者command(win95系列) -> 回车, 打开命令行窗口。
键入"cl"并回车, 如果有类似如下的输出 :
--------------------------------------------------------------------------------
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version
12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
--------------------------------------------------------------------------------
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version
14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
--------------------------------------------------------------------------------
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器
15.00.30729.01 版
版权所有(C) Microsoft Corporation。保留所有权利。
用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]
--------------------------------------------------------------------------------
一般来说, 就可以在命令行下使用cl了。
cl文件版本与VS版本、VC产品版本、_MSC_VER宏的对应关系如下表:
VS版本
|
VC产品版本号
|
cl文件版本号
|
_MSC_VER宏的值
|
98
|
6.x
|
12.x
|
1200
|
2005
|
8.x
|
14.x
|
1400
|
2008
|
9.x
|
15.x
|
1500
|
二、 测试失败
如果出现:
1. “cl不是内部或外部命令,也不是可运行的程序或批处理文件。”
说明cl不在Path环境变量中。
2. 找不到xxx.dll。
cl在Path环境变量中, Path中缺少必要的dll的路径。
3. 上述测试通过, 但是在编译时出现找不到头文件或者库。
说明Path环境变量中有cl和必要dll的路径, 但是仍缺少其他一些环境变量。
这些情况, 都需要进一步配置环境变量。
三、 配置环境变量
三.1 、让安装包帮助注册环境变量
VC6在安装的时候,会弹出一个对话框,让你选择是否注册VC6的环境变量。如下:
For your convenince, the environment variables required to run build tools from a command prompt are saved in the VCVARS32.BAT in your BIN directory
(复选框)
Register Environment Variables
Turn on this option to register environment variables for running Visual C++ tools from the command line.
默认复选框是没有选中的。
如果选中, 安装完毕后就会添加必要的环境变量。
所以, 一个办法是重新安装VC6(反正很小,相对于VC8、9安装十分快速)。
三.2 、
手工添加环境变量以VC6举例,我们可以在 :“我的电脑” -> “属性” -> “高级” -> “环境变量”中添加如下变量:
%Path%="
prefix\Microsoft Visual Studio\VC98\Bin";%Path%
cl.exe所在路径。
%include%="
prefix\Microsoft Visual Studio\VC98\Include";%include%
%lib%="
prefix\Microsoft Visual Studio\VC98\Lib";%lib%
C/C++以及Platform SDK
%include%="
prefix\Microsoft Visual Studio\VC98\MFC\Include";%include%
%lib%="
prefix\Microsoft Visual Studio\VC98\MFC\Lib";%include%
MFC
%include%="
prefix\Microsoft Visual Studio\VC98\ATL\Include";%include%
ATL
(其中的
prefix是安装目录的前缀)之后就可以在命令行中使用cl了。
同时, VC6、8、9都提供了一个批处理
vcvars32.bat。
我们可以查看相应的vcvars32.bat最终做了什么工作,而手工加入需要的变量。
下内容摘自我机器上的v
svars32.bat(VC8、9的vcvars32.bat最终调用它们):
vc8
@set PATH=D:\Program Files\Microsoft Visual Studio 8\Common7\IDE;D:\Program Files\Microsoft Visual Studio 8\VC\BIN;D:\Program Files\Microsoft Visual Studio 8\Common7\Tools;D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\bin;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\bin;D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;D:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PATH%
@set INCLUDE=D:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;D:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include;D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include;%INCLUDE%
@set LIB=D:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;D:\Program Files\Microsoft Visual Studio 8\VC\LIB;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\lib;D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%LIB%
@set LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;D:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB
vc9
@set PATH=D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;D:\Program Files\Microsoft Visual Studio 9.0\VC\BIN;D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;D:\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages;%PATH%
@set INCLUDE=D:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE;D:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE;%INCLUDE%
@set LIB=D:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB;D:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;%LIB%
@set LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;D:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB;D:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;%LIBPATH%
可以根据它们,给VC8、9设置环境变量。
三.3 、使用vcvars32.bat
上面提到vcvars32.bat,它们的位置如下:
VC6
prefix\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT
VC8
prefix\Microsoft Visual Studio 8\VC\bin\vcvars32.bat
VC9
prefix\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat
需要注意的是: 这些批处理文件只会在
当前进程中设置(局部的)环境变量,也就是说:
1. 用cmd(或者command)打开的命令行窗口中, 运行某个vcvar32.bat一次。
那么当前命令行窗口中就可以正常使用cl,直到关闭。
2. 写批处理文件需要使用
call prefix\vcvars32.bat,而不是直接启动vcvars32.bat。
前者为当前进程(cpl.bat创建的进程)添加局部于进程环境变量。
后者启动一个进程, 为其加入环境变量, 然后该进程立即退出——没有任何作用。
三.4、 使用VSXXCOMNTOOLS变量(VC8、9)
对于VC8、9有另一种方式——不注册全局的(系统或当前用户)环境变量,仅为当前进程设置(局部的)环境变量。
因为VC8、9都可以
很方便的为单个进程设置环境变量。
观察vc8和vc9的vcvars32.bat的内容(位置见上), 发现它们都只有一行:
"%V
S80COMNTOOLS%v
svars32.bat"
"%V
S90COMNTOOLS%v
svars32.bat"
VS80COMNTOOLS、VS90COMNTOOLS(注意不是VC而是VS)分别是VS2005和VS2008安装后会设置的环境变量。
所以我们也可以在自己的批处理中,很方便的为当前进程设置需要的环境变量。如下:
call "
%VS80COMNTOOLS%vsvars32.bat"
以下cl命令将执行VC8的cl。
call "
%VS90COMNTOOLS%vsvars32.bat"
以下cl命令将执行VC9的cl。
四、 总结
如果仅需要使用某个版本的VC, 并且只为自己方便而使用命令行, 可以使用上面任何一种方式。
简单归纳如下:
1、 使用全局环境变量——在系统或当前用户变量中加入需要的值。
1.1 重新安装
1.2 手工加入
2、 不使用全局环境变量
——在执行cl前,先使用对应的vcvars32.bat(命令行窗口中执行或者脚本中call prefix\vcvars32.bat)。
2.1 将vcvars32.bat加入Path变量
2.2 使用"%V
SXXCOMNTOOLS%v
svars.bat" (VC8、9) 或者 absolutePath\vcvars32.bat
如果需要使用多个版本的VC、 或者需要将编译脚本发布给客户使用, 就不能这么随意了。
具体见:《
配置msvc命令行环境(续)——编写msvc编译脚本》
相关链接:
——《
配置msvc命令行环境(续)——编写msvc编译脚本》
http://www.cppblog.com/ownwaterloo/archive/2009/04/16/write_compile_script_for_msvc.html
——《IDE 不是程序员的唯一选择(一)》
http://blog.codingnow.com/2008/09/replacement_of_ide_1.html
本
作品采用
知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
转载请注明 :
文章作者 - OwnWaterloo
发表时间 - 2009年04月15日
原文链接 -
http://www.cppblog.com/ownwaterloo/archive/2009/04/15/environment_for_using_cl_from_command_line.html
posted on 2009-04-15 21:29
OwnWaterloo 阅读(58149)
评论(0) 编辑 收藏 引用