本人采用Visual Studio 2010編譯器編譯代碼,根據書上給出命令測試,結果出現“在命令行鍵入“cl”時出現不是內部或外部命令,也不是可運行的程序或批處理文件的問題。”百度后得到解決方法并且有所拓展。
在windows操作系統中,打開命令行,輸入cl,若系統提示
'cl' 不是內部或外部命令,也不是可運行的程序或批處理文件。
則說明VS沒有安裝或者環境變量設置不正確,可以按照如下步驟設置:1. 確保已經安裝VS,并在控制臺 中鍵入set 檢查是否有類似如下格式的環境變量VSXXCOMNTOOLS
VS90COMNTOOLS=D:/PRogram Files/Microsoft Visual Studio 9.0/Common7/Tools/
其中XX與VS版本有關: a) VS2003對應 VS71COMNTOOLS b) VS2005對應VS80COMNTOOLS c) VS2008對應VS90COMNTOOLS
如果沒有則執行步驟2;否則執行步驟3
2. 在我的電腦>屬性>高級>環境變量>系統變量 中新建一個環靜變量 變量名: VSXXCOMNTOOLS 變量值: VS安裝目錄/Common7/Tools/ 重復執行步驟1
3. 在控制臺中鍵入
>call "%VS90COMNTOOLS%"vsvars32.bat <==設置cl運行時的一些環境變量 >cl
確保沒有提示出錯;否則重復步驟1
注意:用set設置環境變量,只能保證在本命令行中生效,命令行窗口一旦關閉,設置就失效了。要想設置也作用于其他命令行窗口,通過我的電腦->環境變量來設置
cl使用簡介cl有很多選項,請通過cl /?獲取完整列表。這里列出了一些最重要的選項(選項的前綴可以是'-'或'/'),并且有例子。
無選項>cl foo.c bar.c <==編譯出foo.obj,bar.obj并自動調用鏈接器link鏈接得到foo.exe
/c 只編譯不鏈接>cl /c foo.c bar.c <==編譯出foo.obj,bar.obj,但不調用鏈接器
/link <lib> 指定要鏈接的Library>cl /link kernel32.lib foo.c <==編譯出foo.obj,并鏈接kernel32.lib,得到foo.exe
/I <dir> 把目錄加入include搜錄路徑中
/D<name>{=|#}<text> 定義預處理器>cl /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE <==定義2個預處理器
cl常用選項/c 只編譯不鏈接/O2 設定速度最優化/W3 設定警告等級3
cl相關解釋關于CRT的更多解釋如何禁止警告4996
/D_CRT_SECURE_NO_DEPRECATE 關閉warning:4996(表示strcpy不安全的warning等)/D_CRT_NONSTDC_NO_DEPRECATE 非標準C也關閉warning:4996/MD 更多關于CRT的解釋
link使用簡介link有很多選項,完整列表見http://msdn.microsoft.com/zh-tw/library/y0zzbyt4.aspx,下面僅列出一些常用選項
[/debug] 產生調試信息link /out:main.exe main.obj <==鏈接main.obj并生成main.exe
[/pdb:<target>] 產生調試符號文件link /debug /out:main.exe main.obj <==鏈接main.obj并生成帶有調試信息的main.exe
[/out:<target>] 指定輸出文件link /debug /pdb:main.pdb /out:main.exe main.obj <==鏈接main.obj并生成帶有調試信息的main.exe以及調試符號文件main.pdb
[/subsystem:<target>] 指定子系統http://msdn.microsoft.com/zh-cn/library/fcc1zstk.aspxlink /subsystem:windows /out:main.exe main.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib <== 編譯windows程序,入口函數自動設為WinMain,其中kernel32.lib,...,odbccp32.lib等為windows程序必須鏈接的lib
[/libpath:<dir>] 把目錄加入lib搜索路徑中。如果有多個路徑,則要寫多次/libpathlink /libpath:../common /out:main.exe main.obj lua.lib <== 鏈接../common中的lua.lib
值得注意的是:如果同時提供main和WinMain,那么必須手工指定/subsystem如果只提供main,則鏈接器自動指定/subsystem:console
應用實例通常我們把cl和link分開使用:下面是編譯lua的一段腳本
cl /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /DLUA_BUILD_AS_DLL l*.cdel lua.obj luac.obj <==上述cl編譯所有的l*.c,而lua.obj和luac.obj是不需要link的,所以刪除之link /DLL /out:lua51.dll l*.obj
轉自:windows 控制臺下運行cl命令
新聞熱點
疑難解答