posts - 16,  comments - 34,  trackbacks - 0

有些时候使用命令行而不是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最终做了什么工作,而手工加入需要的变量。
下内容摘自我机器上的vsvars32.bat(VC8、9的vcvars32.bat最终调用它们):
vc8

vc9

可以根据它们,给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的内容(位置见上), 发现它们都只有一行:
"%VS80COMNTOOLS%vsvars32.bat"
"%VS90COMNTOOLS%vsvars32.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 使用"%VSXXCOMNTOOLS%vsvars.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



 
Creative Commons License
作品采用知识共享署名-非商业性使用-相同方式共享 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 阅读(58121) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(8)

随笔档案(16)

链接

搜索

  •  

积分与排名

  • 积分 - 196661
  • 排名 - 132

最新随笔

最新评论

阅读排行榜

评论排行榜