標籤: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