小華的部落格: 2009/6/14 - 2009/6/21

搜尋此網誌

星期四, 6月 18, 2009

Visual C++ 編譯器選項

最近常常在寫C語言且被編譯器的選項困擾,所以就到微軟網站找到相關的資訊。
因為怕微軟更新網站資料就消失了,因此在這邊記錄選項的部分內容,如果有興趣了解更多的人可以到經由連結到微軟網站得到更多詳細的訊息:

Visual C++ 編譯器選項
選項 用途

@

指定回應檔。

/?

列出編譯器選項。

/AI

指定一個要搜尋的目錄,以解析傳遞給 #using 指示詞的檔案參考。

/analyze

啟用程式碼分析

/arch

在程式碼產生時使用 SSE 或 SSE2 指令 (僅適用於 x86)。

/bigobj

增加 .obj 檔中可定址區段的數目

/C

在前置處理過程中保留註解。

/c

編譯而不連結。

/clr

產生輸出檔案,以便在 Common Language Runtime 上執行。

/D

定義常數和巨集。

/doc

將文件註解處理成 XML 檔案

/E

複製前置處理器輸出至標準輸出。

/EH

指定例外處理模型。

/EP

複製前置處理器輸出至標準輸出。

/errorReport

讓您直接提供內部編譯器錯誤 (ICE) 資訊給 Visual C++ 團隊

/F

設定堆疊大小。

/favor

產生已為特定 x64 架構最佳化的程式碼,或為 AMD64 和 延伸記憶體 64 技術 (Extended Memory 64 Technology, EM64T) 架構中微架構特性最佳化的程式碼

/FA

建立清單檔。

/Fa

設定清單檔名稱。

/FC

顯示在診斷測試中傳遞給 cl.exe 的原始程式檔完整路徑

/Fd

重新命名程式資料庫檔案。

/Fe

重新命名可執行檔。

/FI

前置處理指定的包含檔。

/Fm

建立對應檔 (Mapfile)。

/Fo

建立目的檔。

/fp

指定浮點行為

/Fp

指定先行編譯標頭檔的名稱。

/FR

/Fr

產生瀏覽器檔案。

/FU

強制使用某一檔名,就如同它已傳遞給 #using 指示詞一樣。

/Fx

將插入的程式碼與原始程式檔合併。

/G1

為 Itanium 處理器執行最佳化。只有 IPF 跨平台編譯器或 IPF 原生編譯器才有提供。

/G2

為 Itanium2 處理器最佳化 (預設值為 /G1 與 /G2 之間),只有 IPF 跨平台編譯器或 IPF 原生編譯器才有提供。

/GA

對 Windows 應用程式進行程式碼最佳化。

/Gd

使用 __cdecl 呼叫慣例 (僅適用於 x86)。

/Ge

啟動堆疊探查。

/GF

啟用字串共用。

/GH

呼叫攔截 (Hook) 函式 _pexit

/Gh

呼叫攔截 (Hook) 函式 _penter

/GL

啟用整個程式最佳化。

/Gm

啟用最少重建。

/GR

啟用執行階段型別資訊 (RTTI)。

/Gr

使用 __fastcall 呼叫慣例 (僅適用於 x86)。

/GS

緩衝處理安全性檢查。

/Gs

控制堆疊探查。

/GT

對使用靜態執行緒區域儲存區配置的資料支援 Fiber 安全性。

/GX

啟用同步例外處理。

/Gy

啟用函式階層連結。

/GZ

/RTC1 相同。/RTC (執行階段錯誤檢查)

/Gz

使用 __stdcall 呼叫慣例 (僅適用於 x86)。

/H

限制外部 (公用) 名稱的長度。

/HELP

列出編譯器選項。

/homeparams

在函式進入時,強制暫存器中所傳遞的參數寫入至堆疊上的位置。這個編譯器選項只適用於 x64 編譯器 (原生和跨平台編譯)

/hotpatch

建立可線上修補的影像

/I

搜尋包含檔的目錄。

/J

變更預設 char 型別。

/LD

建立動態連結程式庫。

/LDd

建立偵錯動態連結程式庫。

/link

傳遞指定的選項給 LINK。

/LN

建立 MSIL 模組

/MD

使用 MSVCRT.lib 建立多執行緒 DLL。

/MDd

使用 MSVCRTD.lib 建立偵錯多執行緒 DLL。

/MT

使用 LIBCMT.lib 建立多執行緒可執行檔。

/MTd

使用 LIBCMTD.lib 建立偵錯多執行緒可執行檔。

/nologo

隱藏登入程式的啟始資訊。

/O1

建立小型程式碼。

/O2

建立快速程式碼。

/Ob

控制內嵌展開。

/Od

停用最佳化。

/Og

使用全域最佳化。

/Oi

產生內建函式。

/openmp

在原始程式碼中啟用 #pragma omp

/Os

偏好小的程式碼。

/Ot

偏好快的程式碼。

/Ox

使用最大最佳化 (/Ob2gity /Gs)。

/Oy

省略框架指標 (僅適用於 x86)。

/QIfist

在必須從浮點型別轉換為整數型別時,抑制 _ftol (僅適用於 x86)。

/QIPF_B

根據 B CPU 逐步偵錯的 errata,不會產生指令順序,而導致意外結果(僅適用於 IPF)。

/QIPF_C

根據 C CPU 逐步偵錯的 errata,不會產生指令順序,而導致意外結果(僅適用於 IPF)。

/QIPF_fr32

不要使用上層 96 浮點暫存器(僅適用於 IPF)。

/QIPF_noPIC

產生影像加上與位置有關的程式碼 (僅適用於 IPF)

/QIPF_restrict_plabels

為不在執行階段建立函式的程式增強效能(僅適用於 IPF)。

/P

將前置處理器輸出寫入檔案。

/RTC

啟用執行階段錯誤檢查。

/showIncludes

在編譯時顯示包含檔清單。

/Tc

/TC

指定 C 原始程式檔。

/Tp

/TP

指定 C++ 原始程式檔。

/U

移除某個預先定義巨集。

/u

移除所有預先定義巨集。

/V

設定版本字串。

/vd

抑制或啟用隱藏的 vtordisp 類別成員。

/vmb

對指向成員的指標使用最佳基底。

/vmg

對指向成員的指標使用完整一般性。

/vmm

宣告多重繼承。

/vms

宣告單一繼承。

/vmv

宣告虛擬繼承。

/W

設定警告層級。

/w

停用所有警告。

/Wall

啟用所有警告,包括預設停用的警告。

/WL

從命令列編譯 C++ 原始程式碼時啟用一行錯誤和警告訊息診斷。

/Wp64

偵測 64 位元可移植性問題。

/X

忽略標準 Include 目錄。

/Y-

忽略目前組建中所有其他先行編譯標頭編譯器選項。

/Yc

建立先行編譯標頭檔。

/Yd

將完整的偵錯資訊置於所有目的檔中。

/Yl

在建立偵錯程式庫時插入一個 PCH 參考

/Yu

在建置時使用先行編譯標頭檔。

/Z7

產生 C 7.0 相容的偵錯資訊。

/Za

停用語言擴充功能。

/Zc

指定 /Ze 下的標準行為。/Za、/Ze (停用語言擴充功能)

/Ze

啟用語言擴充功能。

/Zg

產生函式原型。

/ZI

將偵錯資訊包括在與「編輯後繼續」相容的程式資料庫中。

/Zi

產生完整偵錯資訊。

/Zl

從 .obj 檔案移除預設程式庫名稱 (僅適用於 x86)。

/Zm

指定先行編譯標頭的記憶體配置上限。

/Zp

封裝結構成員。

/Zs

僅檢查語法。

/Zx

產生可偵錯最佳化程式碼,只有 IPF 跨平台編譯器或 IPF 原生編譯器才有提供


Reference