有些時候使用命令行而不是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.shnenglu.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.shnenglu.com/ownwaterloo/archive/2009/04/15/environment_for_using_cl_from_command_line.html
posted on 2009-04-15 21:29
OwnWaterloo 閱讀(58262)
評論(0) 編輯 收藏 引用