windows 控制台下運行cl命令

來源:互聯網
上載者:User

標籤:blog   http   使用   strong   檔案   os   

前提:確保已經安裝vc6或者vs系列

我們可以再命令列直接編譯c++程式

在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.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

 

轉自:http://blog.csdn.net/daisy19900111/article/details/8035131

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.