1. 程式人生 > >微軟 CL.exe 編譯器選項

微軟 CL.exe 編譯器選項

本文包含絕對的編譯器選項列表。 有關按字母順序排序的列表,請參見 按字母順序列出的編譯器選項。

優化

/O1  建立小程式碼。
/O2  建立快速程式碼。
/Ob  控制內聯展開。
/Od  禁用優化。
/Og  使用全域性優化。
/Oi  生成內部函式。
/Os  程式碼大小優先。
/Ot  程式碼速度優先。
/Ox  使用最大優化 (/Ob2gity /Gs)。
/Oy  省略幀指標。 (僅限 x86)

程式碼生成

/arch    使用 SSE 或 SSE2 指令生成程式碼。 (僅限 x86)
/bigobj  增加 .obj 檔案中可定址節的數目。
/clr     生成要在公共語言執行時上執行的輸出檔案。
/EH      指定異常處理模型。
/favor   生成為特定 x64 結構或為 AMD64 和 64
位記憶體擴充套件技術 (EM64T) 結構中的特定巨集結構進行了優化的程式碼。 /fp 指定浮點行為。 /G1 針對 Itanium 處理器進行優化。 僅在 IPF 跨平臺編譯器或 IPF 本機編譯器中可用。 /G2 針對 Itanium2 處理器進行優化。 僅在 IPF 跨平臺編譯器或 IPF 本機編譯器中可用。 /Gd 使用呼叫約定 __cdecl。 (僅限 x86) /Ge 啟用堆疊探測。 /GF 啟用字串池。 /Gh 呼叫掛鉤函式 _penter。 /GH 呼叫掛鉤函式 _pexit。 /GL 啟用全程式優化。 /Gm 啟用最小重新生成。 /GR 啟用執行時型別資訊 (RTTI)。 /Gr 使用呼叫約定 __fastcall。 (僅限 x86) /Gs 控制堆疊探測。 /GT 支援資料的纖程安全分配通過使用靜態執行緒本地儲存區。 /GX 啟用同步異常處理。 /Gy 啟用函式級連結。 /Gz 使用呼叫約定 __stdcall。 (僅限 x86) /MD 使用 MSVCRT.lib
,建立多執行緒 DLL。 /MDd 使用 MSVCRTD.lib,建立除錯多執行緒 DLL。 /MT 使用 LIBCMT.lib,建立多執行緒可執行檔案。 /MTd 使用 LIBCMTD.lib,建立除錯多執行緒可執行檔案。 /Qpar 啟用標有 #pragma 迴圈 () 指令迴圈的自動並行化。 /ZW 在 Windows 執行時生成的輸出檔案執行。 /Qfast_transcendentals 生成快速先驗。 /Qimprecise_fwaits 移除 try 塊中的 fwait 命令。 /Qvec-report (Auto-Vectorizer Reporting Level) 啟用自動 vectorization 的報告級別。

輸出檔案

/FA  列表配置檔案的程式集。
/Fa  建立列表檔案的程式集。
/Fd  重新命名程式資料庫檔案。
/Fe  重新命名可執行檔案。
/Fi  指定預處理輸出檔名。
/Fm  建立對映檔案。
/Fo  建立物件檔案。
/Fp  指定預編譯標頭檔案名。
/FR /Fr  生成瀏覽器檔案。
/Fx  插入的程式碼與原始檔合併。

除錯

/GS    檢查緩衝區安全。
/GZ    與 /RTC1 相同
/RTC   啟用執行時錯誤檢查。
/Wp64  檢測 64 位可移植性問題。
/Yd    將完整的除錯資訊放在所有物件檔案中。
/Yl    在建立除錯庫時,插入 PCH 引用。
/Z7    生成與 C 7.0 相容的除錯資訊。
/Zi    生成完整的除錯資訊。
/ZI    將除錯資訊包含在與“編輯並繼續”相容的程式資料庫中。 (僅限 x86)
/homeparams  強制將傳入暫存器的引數寫入其在函式入口的堆疊上的位置。 此編譯器選項僅適用於 x64 編譯器(本機編譯和跨平臺編譯)。

前處理器

/AI  指定在解析傳遞到 #using 指令的檔案引用時搜尋的目錄。
/C   在預處理期間保留註釋。
/D   定義常數和巨集。
/E   將前處理器輸出複製到標準輸出。
/EP  將前處理器輸出複製到標準輸出。
/FI  預處理指定的包含檔案。
/FU  強制使用檔名,就象它已被傳遞 #using 指令。
/I   在目錄中搜索包含檔案。
/P   將前處理器輸出寫入檔案。
/U   移除預定義巨集。
/u   移除所有的預定義巨集。
/X   忽略標準包含目錄。

語言

/openmp    在原始碼中啟用 #pragma omp。
/vd        取消或啟用隱藏的 vtordisp 選件類成員。
/vmb       對指向成員的指標使用最佳的基。
/vmg       對指向成員的指標使用完全一般性。
/vmm       宣告多重繼承。
/vms       宣告單一繼承。
/vmv       宣告虛擬繼承。
/volatile  選擇 volatile 關鍵字如何解釋。
/Za        禁用語言擴充套件。
/Zc        指定在 /Ze 下的標準行為。
/Ze        啟用語言擴充套件。
/Zg        生成函式原型。
/Zl        從 .obj 檔案中移除預設庫名值。
/Zp n      封裝結構成員。
/Zs        只檢查語法。

連結

/F    設定堆疊大小。
/LD   建立動態連結庫。
/LDd  建立除錯動態連結庫。
/LN   建立 MSIL 模組。
/link 將指定的選項傳遞給 LINK。
/MD   使用 MSVCRT.lib,編譯以建立多執行緒 DLL。
/MDd  使用 MSVCRTD.lib,編譯以建立除錯多執行緒 DLL。
/MT   使用 LIBCMT.lib,編譯以建立多執行緒可執行檔案。
/MTd  使用 LIBCMTD.lib,編譯以建立除錯多執行緒可執行檔案。

預編譯頭

/Y-  忽略當前生成中的所有其他預編譯頭編譯器選項。
/Yc  建立預編譯標頭檔案。
/Yd  將完整的除錯資訊放在所有物件檔案中。
/Yu  在生成期間使用預編譯標頭檔案。

雜項

/?            列出編譯器選項。
@             指定響應檔案。
/analyze      啟用程式碼分析。
/c            編譯但不連結。
/doc          將文件註釋處理到一個 XML 檔案中。
/errorReport  可以提供內部編譯器錯誤 (ICE) 資訊直接對 Visual C++ 團隊。
/FC           顯示原始碼檔案的完整路徑傳遞給診斷文字的 cl.exe。
/H            限制外部(公共)名稱的長度。
/HELP         列出編譯器選項。
/hotpatch     建立可熱修補的映像。
/J            更改預設的 char 型別。
/kernel       編譯器和連結器將建立在核心中執行的二進位制檔案。
/MP           同時生成多個原始檔。
/nologo       取消顯示登入版權標誌。
/showIncludes 顯示所有的列表在編譯時包含檔案。
/Tc /TC       指定 C 原始檔。
/Tp /TP       指定 C++ 原始檔。
/V            設定版本字串。
/Wall         啟用所有警告,包括預設情況下禁用的警告。
/W            設定警告等級。
/w            禁用所有警告。
/WL           在從命令列編譯 C++ 原始碼時啟用錯誤訊息和警告訊息的單行診斷。
/Zm           指定預編譯頭記憶體分配限制。
QIfist        當需要從浮點型轉換為整型時,取消呼叫 Helper 函式 _ftol。 (僅限 x86)
/QIPF_B       不生成會導致 B CPU 單步執行勘誤表中所載異常結果的指令序列。 (僅限 IPF)
/QIPF_C       不生成會導致 B CPU 單步執行勘誤表中所載異常結果的指令序列。 (僅限 IPF)
/QIPF_fr32    不使用高 96 位浮點暫存器。 (僅限 IPF)
/QIPF_noPIC   生成具有位置相關程式碼的映像(僅限 IPF)。
/QIPF_restrict_plabels  為在執行時不建立函式的程式增強效能。 (僅限 IPF)