前提:確保已經安裝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 指定要鏈結的library
>cl /link kernel32.lib foo.c <==編譯出foo.obj,並鏈結kernel32.lib,得到foo.exe
/i 把目錄加入include蒐錄路徑中
/d定義預處理器
>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有很多選項,完整列表見下面僅列出一些常用選項
[/debug] 產生除錯資訊
link /out:main.exe main.obj <==鏈結main.obj並生成main.exe
[/pdb:] 產生除錯符號檔案
link /debug /out:main.exe main.obj <==鏈結main.obj並生成帶有除錯資訊的main.exe
[/out:] 指定輸出檔案
link /debug /pdb:main.pdb /out:main.exe main.obj <==鏈結main.obj並生成帶有除錯資訊的main.exe以及除錯符號檔案main.pdb
[/subsystem:] 指定子系統
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:] 把目錄加入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
windows 控制台下執行cl命令
前提 確保已經安裝vc6或者vs系列 我們可以再命令列直接編譯c 程式 在windows作業系統中,開啟命令列,輸入cl,若系統提示 cl 不是內部或外部命令,也不是可執行的程式或批處理檔案。則說明vs沒有安裝或者環境變數設定不正確,可以按照如下步驟設定 1.確保已經安裝vs,並在控制台 中鍵入se...
在控制台下執行c語言程式
從剛開始學習c語言的時候,就開始使用各種ide,例如codeblocks,visual studio等等。那麼,如果不使用ide的話,如何在windows控制台下編譯以及執行我們寫好的c語言程式呢?首先,我們需要知道的是,c語言的編譯器不是作業系統自帶的部分,一般在windows環境下可以安裝商業化...
Windows系統中控制台下編譯C C 檔案
windows系統中控制台下編譯c c 檔案 以vs2010為例,裡面有vc的功能 microsoft visual studio 9.0 vc bin 這裡放有編譯器 cl.exe,將其加到系統變數中的path中即可 microsoft visual studio 9.0 vc include 這...