標記一windows 控制檯下運行cl命令

使用以前
打開控制檯(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

相關文章
相關標籤/搜索