有些時(shí)候使用命令行而不是IDE去編譯源代碼會(huì)比較方便。 一、 環(huán)境變量測(cè)試 測(cè)試cl的環(huán)境是否配置妥當(dāng), 可以執(zhí)行如下測(cè)試: win鍵+R 啟動(dòng)運(yùn)行 -> 輸入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++ 優(yōu)化編譯器 15.00.30729.01 版 版權(quán)所有(C) Microsoft Corporation。保留所有權(quán)利。 用法: cl [ 選項(xiàng)... ] 文件名... [ /link 鏈接選項(xiàng)... ] --------------------------------------------------------------------------------
二、 測(cè)試失敗 如果出現(xiàn): 1. “cl不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件?!?br>說明cl不在Path環(huán)境變量中。 2. 找不到xxx.dll。 cl在Path環(huán)境變量中, Path中缺少必要的dll的路徑。 3. 上述測(cè)試通過, 但是在編譯時(shí)出現(xiàn)找不到頭文件或者庫。 說明Path環(huán)境變量中有cl和必要dll的路徑, 但是仍缺少其他一些環(huán)境變量。 這些情況, 都需要進(jìn)一步配置環(huán)境變量。 三、 配置環(huán)境變量 三.1 、讓安裝包幫助注冊(cè)環(huán)境變量 VC6在安裝的時(shí)候,會(huì)彈出一個(gè)對(duì)話框,讓你選擇是否注冊(cè)VC6的環(huán)境變量。如下: 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 (復(fù)選框) Register Environment Variables Turn on this option to register environment variables for running Visual C++ tools from the command line. 默認(rèn)復(fù)選框是沒有選中的。 如果選中, 安裝完畢后就會(huì)添加必要的環(huán)境變量。 所以, 一個(gè)辦法是重新安裝VC6(反正很小,相對(duì)于VC8、9安裝十分快速)。 三.2 、手工添加環(huán)境變量 以VC6舉例,我們可以在 :“我的電腦” -> “屬性” -> “高級(jí)” -> “環(huán)境變量”中添加如下變量: %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了。 同時(shí), VC6、8、9都提供了一個(gè)批處理vcvars32.bat。 我們可以查看相應(yīng)的vcvars32.bat最終做了什么工作,而手工加入需要的變量。 下內(nèi)容摘自我機(jī)器上的vsvars32.bat(VC8、9的vcvars32.bat最終調(diào)用它們): vc8
vc9
可以根據(jù)它們,給VC8、9設(shè)置環(huán)境變量。 三.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 需要注意的是: 這些批處理文件只會(huì)在當(dāng)前進(jìn)程中設(shè)置(局部的)環(huán)境變量,也就是說: 1. 用cmd(或者command)打開的命令行窗口中, 運(yùn)行某個(gè)vcvar32.bat一次。 那么當(dāng)前命令行窗口中就可以正常使用cl,直到關(guān)閉。 2. 寫批處理文件需要使用call prefix\vcvars32.bat,而不是直接啟動(dòng)vcvars32.bat。 前者為當(dāng)前進(jìn)程(cpl.bat創(chuàng)建的進(jìn)程)添加局部于進(jìn)程環(huán)境變量。 后者啟動(dòng)一個(gè)進(jìn)程, 為其加入環(huán)境變量, 然后該進(jìn)程立即退出——沒有任何作用。 三.4、 使用VSXXCOMNTOOLS變量(VC8、9) 對(duì)于VC8、9有另一種方式——不注冊(cè)全局的(系統(tǒng)或當(dāng)前用戶)環(huán)境變量,僅為當(dāng)前進(jìn)程設(shè)置(局部的)環(huán)境變量。 因?yàn)閂C8、9都可以很方便的為單個(gè)進(jìn)程設(shè)置環(huán)境變量。 觀察vc8和vc9的vcvars32.bat的內(nèi)容(位置見上), 發(fā)現(xiàn)它們都只有一行: "%VS80COMNTOOLS%vsvars32.bat" "%VS90COMNTOOLS%vsvars32.bat" VS80COMNTOOLS、VS90COMNTOOLS(注意不是VC而是VS)分別是VS2005和VS2008安裝后會(huì)設(shè)置的環(huán)境變量。 所以我們也可以在自己的批處理中,很方便的為當(dāng)前進(jìn)程設(shè)置需要的環(huán)境變量。如下: call "%VS80COMNTOOLS%vsvars32.bat" 以下cl命令將執(zhí)行VC8的cl。 call "%VS90COMNTOOLS%vsvars32.bat" 以下cl命令將執(zhí)行VC9的cl。 四、 總結(jié) 如果僅需要使用某個(gè)版本的VC, 并且只為自己方便而使用命令行, 可以使用上面任何一種方式。 簡單歸納如下: 1、 使用全局環(huán)境變量——在系統(tǒng)或當(dāng)前用戶變量中加入需要的值。 1.1 重新安裝 1.2 手工加入 2、 不使用全局環(huán)境變量 ——在執(zhí)行cl前,先使用對(duì)應(yīng)的vcvars32.bat(命令行窗口中執(zhí)行或者腳本中call prefix\vcvars32.bat)。 2.1 將vcvars32.bat加入Path變量 2.2 使用"%VSXXCOMNTOOLS%vsvars.bat" (VC8、9) 或者 absolutePath\vcvars32.bat 如果需要使用多個(gè)版本的VC、 或者需要將編譯腳本發(fā)布給客戶使用, 就不能這么隨意了。 具體見:《配置msvc命令行環(huán)境(續(xù))——編寫msvc編譯腳本》
相關(guān)鏈接: ——《配置msvc命令行環(huán)境(續(xù))——編寫msvc編譯腳本》 http://www./ownwaterloo/archive/2009/04/16/write_compile_script_for_msvc.html
本作品采用知識(shí)共享署名-非商業(yè)性使用-相同方式共享 2.5 中國大陸許可協(xié)議進(jìn)行許可。 轉(zhuǎn)載請(qǐng)注明 : 文章作者 - OwnWaterloo 發(fā)表時(shí)間 - 2009年04月15日 原文鏈接 - http://www./ownwaterloo/archive/2009/04/15/environment_for_using_cl_from_command_line.html |
|