1. 程式人生 > >VS 編譯選項

VS 編譯選項

C/C++ 編譯器選項

-優化-

/O1 最小化空間                          /O2 最大化速度

/Ob<n> 內聯擴充套件(預設 n=0)               /Od 禁用優化(預設)

/Og 啟用全域性優化                        /Oi[-] 啟用內部函式

/Os 優選程式碼空間                        /Ot 優選程式碼速度

/Ox 最大化優化                          /Oy[-] 啟用幀指標省略 

-程式碼生成-

/GF 啟用只讀字串池                    /Gm[-] 啟用最小重新生成

/Gy[-] 分隔連結器函式                   /GS[-] 啟用安全檢查

/GR[-] 啟用 C++ RTTI                    /GX[-] 啟用 C++ EH (與 /EHsc 相同)

/EHs 啟用 C++ EH (沒有 SEH 異常)        /EHa 啟用 C++ EH (w/ SEH 異常)

/EHc 外部“C”預設為 nothrow            

/fp:<except[-]|fast|precise|strict> 選擇浮點模式:

except[-] - 在生成程式碼時考慮浮點異常

fast -“fast”浮點模式;結果可預測性比較低

precise -“precise”浮點模式;結果可預測

strict -“strict” 浮點模式(意味著 /fp:except)

即使使用 /fp:except,/Qfast_transcendentals 也生成內聯內部 FP

/GL[-] 啟用連結時程式碼生成               /GA 為 Windows 應用程式進行優化

/Ge 對所有函式強制堆疊檢查              /Gs[num] 控制堆疊檢查呼叫

/Gh 啟用 _penter 函式呼叫               /GH 啟用 _pexit 函式呼叫

/GT 生成纖程安全 TLS 訪問               /RTC1 啟用快速檢查(/RTCsu)

/RTCc 轉換為較小的型別檢查              /RTCs 堆疊幀執行時檢查

/RTCu 未初始化的區域性用法檢查            

/clr[:option] 為公共語言執行時編譯,其中 option 是:

pure - 生成只包含 IL 的輸出檔案(沒有本機可執行程式碼)

safe - 生成只包含 IL 的可驗證輸出檔案

oldSyntax - 接受 Visual C++ 2002/2003 的託管擴充套件語法

initialAppDomain - 啟用 Visual C++ 2002 的初始 AppDomain 行為

noAssembly - 不產生程式集           /Gd __cdecl 呼叫約定 

/Gr __fastcall 呼叫約定                 /Gz __stdcall 呼叫約定

/GZ 啟用堆疊檢查(/RTCs)                 /QIfist[-] 使用 FIST 而不是 ftol()

/hotpatch 確保可熱修補映像的函式填充    

/arch:<SSE|SSE2|AVX> CPU 架構的最低要求,以下選項之一:

SSE - 啟用支援 SSE 的 CPU 可用的指令

SSE2 - 啟用支援 SSE2 的 CPU 可用的指令

AVX - 支援使用 Intel(R) 高階向量擴充套件指令

/Qimprecise_fwaits 僅在“try”邊界而不是“try”內部生成 FWAITs

/Qsafe_fp_loads 生成安全 FP 負載        

-輸出檔案-

/Fa[file] 命名程式集列表檔案            /FA[scu] 配置程式集列表

/Fd[file] 命名 .PDB 檔案                /Fe<file> 命名可執行檔案

/Fm[file] 命名對映檔案                  /Fo<file> 命名物件檔案

/Fp<file> 命名預編譯標頭檔案              /Fr[file] 命名源瀏覽器檔案

/FR[file] 命名擴充套件 .SBR 檔案            /Fi[file] 命名預處理的檔案

/doc[file] 處理 XML 文件註釋,並可選擇命名 .xdc 檔案

-前處理器-

/AI<dir> 新增到程式集搜尋路徑           /FU<file> 強制使用程式集/模組 

/C 不抽出註釋                           /D<name>{=|#}<text> 定義巨集

/E 預處理到 stdout                      /EP 預處理到 stdout,無行號

/P 預處理到檔案                         /Fx 將插入的程式碼合併到檔案中

/FI<file> 命名強制包含檔案              /U<name> 移除預定義的巨集

/u 移除所有預定義的巨集                   /I<dir> 新增到包含搜尋路徑

/X 忽略“標準位置”                     

-語言-

/Zi 啟用除錯資訊                        /Z7 啟用舊式除錯資訊

/Zp[n] 在 n 位元組邊界上包裝結構          /Za 禁用擴充套件

/Ze 啟用擴充套件(預設)                      /Zl 省略 .OBJ 中的預設庫名

/Zg 生成函式原型                        /Zs 只進行語法檢查

/vd{0|1|2} 禁用/啟用 vtordisp           /vm<x> 指向成員的指標型別

/Zc:arg1[,arg2] C++ 語言合規性,這裡的引數可以是:

forScope[-] - 對範圍規則強制使用標準 C++

wchar_t[-] - wchar_t 是本機型別,不是 typedef

auto[-] - 對 auto 強制使用新的標準 C++ 含義

trigraphs[-] - 啟用三元祖(預設為關閉)

/ZI 啟用“編輯並繼續”除錯資訊          /openmp 啟用 OpenMP 2.0 語言擴充套件

- 雜項 -

@<file> 選項響應檔案                    /?, /help 列印此幫助訊息

/bigobj 生成擴充套件的物件格式              /c 只編譯,不連結

/errorReport:option 將內部編譯器錯誤報告給 Microsoft

none - 不傳送報告                       prompt - 提示立即傳送報告

queue - 在下一次管理員登入時,提示傳送報告(預設)

send - 自動傳送報告                 /FC 診斷中使用完整路徑名

/H<num> 最大外部名稱長度                /J 預設 char 型別是 unsigned

/MP[n] 最多使用“n”個程序進行編譯      /nologo 取消顯示版權資訊

/showIncludes 顯示包含檔名            /Tc<source file> 將檔案編譯為 .c

/Tp<source file> 將檔案編譯為 .cpp      /TC 將所有檔案編譯為 .c

/TP 將所有檔案編譯為 .cpp               /V<string> 設定版本字串

/w 禁用所有警告                         /wd<n> 禁用警告 n

/we<n> 將警告 n 視為錯誤                /wo<n> 發出一次警告 n

/w<l><n> 為 n 設定警告等級 1-4          /W<n> 設定警告等級(預設 n=1)

/Wall 啟用所有警告                      /WL 啟用單行診斷

/WX 將警告視為錯誤                      /Yc[file] 建立 .PCH 檔案

/Yd 將除錯資訊放在每個 .OBJ 中          /Yl[sym] 為除錯庫插入 .PCH 引用

/Yu[file] 使用 .PCH 檔案                /Y- 禁用所有 PCH 選項

/Zm<n> 最大記憶體分配(預設為 %)           /Wp64 啟用 64 位埠定位警告

-連結-

/LD 建立 .DLL                           /LDd 建立 .DLL 除錯庫

/LN 建立 .netmodule                     /F<num> 設定堆疊大小

/link [連結器選項和庫]                  /MD 與 MSVCRT.LIB 連結

/MT 與 LIBCMT.LIB 連結                  /MDd 與 MSVCRTD.LIB 除錯庫連結

/MTd 與 LIBCMTD.LIB 除錯庫連結          

-程式碼分析-

/analyze[:WX-] 啟用程式碼分析             

WX- - 即使呼叫了 /WX,也不應將程式碼分析警告視為錯誤