常用cl編譯命令參數解釋

來源:互聯網
上載者:User

緊接前文,第一行cl命令如下:

1>  cl /c /IC:\...\include /ZI /nologo- /W3 /WX- /sdl /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"stdafx.h" /Fp"Debug\HelloWorld.pch" /Fo"Debug\\" /Fd"Debug\vc110.pdb" /Gd /TP /analyze- /errorReport:prompt stdafx.cpp1>cl : Command line warning D9035: option 'nologo-' has been deprecated and will be removed in a future release

找到了MSDN的文檔:

http://msdn.microsoft.com/en-us/library/vstudio/9s7c9wdw.aspx

也可以在Developer Command Prompt for VS2012終端視窗中輸入cl /? 獲得協助資訊。

/c 代表只編譯不連結。

/I 指定標頭檔的目錄

/C 在編譯期間保留代碼注釋,這裡和/I連在一起使用,/IC

首先介紹一個概念,VC中有個PDB檔案,全稱是Program Database,用來存放程式資訊的小的資料庫檔案。

編譯Debug版本時,調試資訊需要保留,我們可以選擇直接將調試資訊寫到.obj檔案中,或者存到.pdb檔案中。

/Z7 不產生.pdb檔案,將所有調試資訊存入.obj檔案中

/Zi和/ZI 都產生.pdb檔案,不過/ZI支援"編輯繼續調試"功能, (the edit and continue feature), 看上去更酷,但是我從來沒有用過這個功能。

/ZI有一些邊際效應,會禁止#pragma optmize 指令,也不能和/clr一起用。

/nologo- 已經無效,自己產生命令列的時候,沒必要用了。

/W3 也中警告層級,VC提供了很多警告層級,參考http://msdn.microsoft.com/en-us/library/vstudio/thxezb7y.aspx

自己編譯的話,直接用/Wall最好。

/WX- 不太明白為什麼有 - 號,(估計是和:NO的意思相同,也就是不啟用該功能), /WX的意思是將warning轉變成error,這樣強迫消除所有的warning,如果和/Wall一起使用,那是最好的。

/sdl 是對代碼進行安全檢查,如果發現相關警告,轉變成錯誤輸出

/Od 禁止最佳化

/Oy- 禁止該選項,該選項如果沒有 - 號,則會在x86上編譯時間忽略frame-pointer,起到加速程式的作用。 frame-pointer,我暫時不知道是啥。

/D 預先處理定義,後面可以跟不同的參數都是宏啊,比如

/D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE

/Gm 啟用最小化重新編譯, VC用.idb保留了上次編譯的緩衝資訊,包括檔案依賴關係。下次編譯時間可以使用.idb檔案用來檢查,跳過不需要重新編譯的檔案。

/EH 異常處理模式,後面可以接一些參數:http://msdn.microsoft.com/en-us/library/vstudio/1deeycx5.aspx

通常都用/EHsc

/RTC 執行階段錯誤檢查,參考:http://msdn.microsoft.com/en-us/library/vstudio/8wtf2dfz.aspx

/MDd 和上面一個都很重要,使用Debug版本的多線程運行時動態庫,參考:http://msdn.microsoft.com/en-us/library/vstudio/2kzt1wy3.aspx

/GS 緩衝區安全檢查

看到這裡,發現cl其實參數很多很多,VC提供了預設的選項,一般都夠用。不過仔細分析一下,還是能夠對cl的特性瞭解不少,對於提高編譯器的認識還是很有好處的。

/fp:precise 是和浮點數相關,參考:http://msdn.microsoft.com/en-us/library/vstudio/e7s85ffb.aspx

/Zc:wchar_t 指定wchar_t是native type,我現在還不不清楚有什麼作用。

/Zc:forScope用/Ze來實現標準C++的for迴圈, /Ze已經被廢除,所以這個選項似乎沒什麼意義。

/Yc "stdafx.h" 制定stdafx.h為先行編譯標頭檔

/Fp"Debug\HelloWorld.pch" 指定先行編譯檔案, 這樣staafx.h編譯出的內容放在HelloWorld.pch中,可以大大提高編譯速度。因為VC中的先行編譯檔案很大,每次重新編譯很耗時。

/Fo"Debug\\" 指定.obj檔案存放在Debug目錄下

/Fd"Debug\vc110.pdb" 指定pdb檔案路徑,pdb前面已經介紹過了。

/Gd 僅用於x86平台。如果C++函數沒有顯示指定__stdcall或者__fastcall,就採用__cdecl

/Tp 指定C++源檔案

/analyze- 這是關閉程式碼分析功能

/errorReport:prompt 提示內部錯誤資訊

以上是編譯用的參數解釋。後面還會看一下連結用的參數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.