使用以前
打開控制檯(CTRL+R>cmd);鍵入cl回車;若是出現以下提示: shell
'cl' 不是內部或外部命令,也不是可運行的程序或批處理文件。 windows
則說明VS沒有安裝或者環境變量設置不正確,能夠按照以下步驟設置:
1. 確保已經安裝VS,並在控制檯 中鍵入set
檢查是否有相似以下格式的環境變量VSXXCOMNTOOLS api
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 ui
3. 在控制檯中鍵入 lua
>call "%VS90COMNTOOLS%"vsvars32.bat <==設置cl運行時的一些環境變量
>cl debug
確保沒有提示出錯;不然重複步驟1 調試
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.aspx
link /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搜索路徑中。若是有多個路徑,則要寫屢次/libpath
link /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*.c del lua.obj luac.obj <==上述cl編譯全部的l*.c,而lua.obj和luac.obj是不須要link的,因此刪除之 link /DLL /out:lua51.dll l*.obj