MSVC編譯器(cl.exe)選項(xiàng)
C/C++ 編譯器選項(xiàng)
? ? ? ? ? ? ? ?-優(yōu)化-
/O1 最大優(yōu)化(優(yōu)選空間)? ? ? ? ? ? ? ? ? /O2 最大優(yōu)化(優(yōu)選速度)
/Ob<n> 內(nèi)聯(lián)擴(kuò)展(默認(rèn) n=0)? ? ? ? ? ? ? ?/Od 禁用優(yōu)化(默認(rèn))
/Og 啟用全局優(yōu)化? ? ? ? ? ? ? ? ? ? ? ? /Oi[-] 啟用內(nèi)部函數(shù)
/Os 優(yōu)選代碼空間? ? ? ? ? ? ? ? ? ? ? ? /Ot 優(yōu)選代碼速度
/Ox 優(yōu)化(優(yōu)選速度)? ? ? ? ? ? ? ? ? ? ??
/favor:<blend|AMD64|INTEL64|ATOM> 選擇優(yōu)化所針對的處理器,為以下值之一:
? blend - 針對幾種不同 x64 處理器的優(yōu)化組合
? AMD64 - 64 位 AMD 處理器? ? ? ? ? ? ? ? ?
? INTEL64 - Intel(R)64 架構(gòu)處理器? ? ? ?
ATOM - Intel(R) Atom(TM) 處理器? ? ? ? ? ? ??
? ? ? ? ? ? ? ?-代碼生成-
/Gu[-] 確保 distinct 函數(shù)具有非重復(fù)地址 /Gw[-] 分隔鏈接器的全局變量
/GF 啟用只讀字符串池? ? ? ? ? ? ? ? ? ? /Gm[-] 啟用最小重新生成
/Gy[-] 分隔鏈接器函數(shù)? ? ? ? ? ? ? ? ? ?/GS[-] 啟用安全檢查
/GR[-] 啟用 C++ RTTI? ? ? ? ? ? ? ? ? ? /GX[-] 啟用 C++ EH (與 /EHsc 相同)
/guard:cf[-] 啟用 CFG (控制流保護(hù))? ? ? /guard:ehcont[-] 啟用 EH 繼續(xù)元數(shù)據(jù)(CET)
/EHs 啟用 C++ EH (沒有 SEH 異常)? ? ? ? /EHa 啟用 C++ EH (w/ SEH 異常)
/EHc 外部 "C" 默認(rèn)為 nothrow? ? ? ? ? ? /EHr 始終生成 noexcept 運(yùn)行時(shí)終止檢查
/fp:<contract|except[-]|fast|precise|strict> 選擇浮點(diǎn)模型:
? ? 協(xié)定 - 生成代碼時(shí)考慮浮點(diǎn)收縮? ? ? ? ?except[-] - 在生成代碼時(shí)考慮浮點(diǎn)異常
? fast - "fast" 浮點(diǎn)模型;結(jié)果可預(yù)測性比較低
? precise - "precise" 浮點(diǎn)模型;結(jié)果可預(yù)測
? strict - "strict" 浮點(diǎn)模型(意味著 /fp:except)
即使使用 /fp:except,/Qfast_transcendentals 也生成內(nèi)聯(lián)內(nèi)部 FP
/Qspectre[-] 對 CVE 2017-5753 啟用緩解措施
/Qpar[-] 啟用并行代碼生成? ? ? ? ? ? ? ?
/Qpar-report:1 自動(dòng)并行化診斷;指示已并行化循環(huán)
/Qpar-report:2 自動(dòng)并行化診斷;指示未并行化循環(huán)
/Qvec-report:1 自動(dòng)向量化診斷;指示已向量化循環(huán)
/Qvec-report:2 自動(dòng)向量化診斷;指示未向量化循環(huán)
/GL[-] 啟用鏈接時(shí)代碼生成? ? ? ? ? ? ? ?/volatile:<iso|ms> 選擇可變模型:
? ? iso - Acquire/release 語義對可變訪問不一定有效
? ? ms - Acquire/release 語義對可變訪問一定有效
/GA 為 Windows 應(yīng)用程序進(jìn)行優(yōu)化? ? ? ? ?/Ge 對所有函數(shù)強(qiáng)制堆棧檢查
/Gs[num] 控制堆棧檢查調(diào)用? ? ? ? ? ? ? ?/Gh 啟用 _penter 函數(shù)調(diào)用
/GH 啟用 _pexit 函數(shù)調(diào)用? ? ? ? ? ? ? ? /GT 生成纖程安全 TLS 訪問
/RTC1 啟用快速檢查(/RTCsu)? ? ? ? ? ? ? /RTCc 轉(zhuǎn)換為較小的類型檢查
/RTCs 堆棧幀運(yùn)行時(shí)檢查? ? ? ? ? ? ? ? ? /RTCu 未初始化的局部用法檢查
/clr[:option] 為公共語言運(yùn)行時(shí)編譯,其中 option 是:
? ? pure : 生成僅包含 IL 的輸出文件(沒有本機(jī)可執(zhí)行代碼)
? ? safe : 生成只包含 IL 的可驗(yàn)證輸出文件
? ? netcore : 生成以 .NET Core 運(yùn)行時(shí)為目標(biāo)的程序集
? ? noAssembly : 不生成程序集? ? ? ? ? ?
? ? nostdlib : 搜索程序集時(shí)忽略系統(tǒng) .NET Framework 目錄
? ? nostdimport : 不隱式導(dǎo)入任何必需的程序集
? ? initialAppDomain : 啟用 Visual C++ 2002 的初始 AppDomain 行為
? ? implicitKeepAlive- : 關(guān)閉 System::GC::KeepAlive(this)的隱式值
/fsanitize=解決啟用地址消毒代碼生成? ? ?
/homeparams 強(qiáng)制將傳入寄存器的參數(shù)寫入到堆棧中
/GZ 啟用堆棧檢查(/RTCs)? ? ? ? ? ? ? ? ?/Gv __vectorcall 調(diào)用約定
/arch:<AVX|AVX2|AVX512> 最小 CPU 架構(gòu)要求,以下之一:
? AVX - 允許使用支持 AVX 的 CPU 可用的指令
? AVX2 - 允許使用支持 AVX2 的 CPU 可用的指令
? AVX512 - 允許使用支持 AVX-512 的 CPU 可用的指令
/QIntel-jcc-erratum 為 Intel JCC Erratum 啟用緩解措施
/Qspectre-load 對加載內(nèi)存的所有指令啟用 spectre 緩解措施
/Qspectre-load-cf 對加載內(nèi)存的所有控制流指令啟用 spectre 緩解措施
/Qspectre-jmp[-] 為無條件跳轉(zhuǎn)指令啟用 Spectre 緩解
/fpcvt:<IA|BC> 無符號(hào)整數(shù)轉(zhuǎn)換兼容性為 FP? ?IA - 與 VCVTTSD2USI 指令兼容的結(jié)果
? ?BC - 與 VS2017 及更低版本的編譯器兼容的結(jié)果
? ? ? ? ? ? ? ?-輸出文件-
/Fa[file] 命名程序集列表文件? ? ? ? ? ? /FA[scu] 配置程序集列表
/Fd[file] 命名 .PDB 文件? ? ? ? ? ? ? ? /Fe<file> 命名可執(zhí)行文件
/Fm[file] 命名映射文件? ? ? ? ? ? ? ? ? /Fo<file> 命名對象文件
/Fp<file> 命名預(yù)編譯頭文件? ? ? ? ? ? ? /Fr[file] 命名源瀏覽器文件
/FR[file] 命名擴(kuò)展 .SBR 文件? ? ? ? ? ? /Fi[file] 命名預(yù)處理的文件
/Fd: <file> 命名 .PDB 文件? ? ? ? ? ? ? /Fe: <file> 命名可執(zhí)行文件
/Fm: <file> 命名映射文件? ? ? ? ? ? ? ? /Fo: <file> 命名對象文件
/Fp: <file> 命名 .PCH 文件? ? ? ? ? ? ? /FR: <file> 命名擴(kuò)展 .SBR 文件
/Fi: <file> 命名預(yù)處理的文件? ? ? ? ? ? /Ft<dir> 為 #import 生成的頭文件的地址
/doc[file] 處理 XML 文檔注釋,并可選擇命名 .xdc 文件
? ? ? ? ? ? ? ?-預(yù)處理器-
/AI<dir> 添加到程序集搜索路徑? ? ? ? ? ?/FU<file> 強(qiáng)制使用程序集/模塊?
/C 不抽出注釋? ? ? ? ? ? ? ? ? ? ? ? ? ?/D<name>{=|#}<text> 定義宏
/E 預(yù)處理到 stdout? ? ? ? ? ? ? ? ? ? ? /EP 預(yù)處理到 stdout,無行號(hào)
/P 預(yù)處理到文件? ? ? ? ? ? ? ? ? ? ? ? ?/Fx 將插入的代碼合并到文件中
/FI<file> 命名強(qiáng)制包含文件? ? ? ? ? ? ? /U<name> 移除預(yù)定義的宏
/u 移除所有預(yù)定義的宏? ? ? ? ? ? ? ? ? ?/I<dir> 添加到包含搜索路徑
/X 忽略“標(biāo)準(zhǔn)位置”? ? ? ? ? ? ? ? ? ? ?/PH 在預(yù)處理時(shí)生成 #pragma file_hash
/PD 打印所有宏定義? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? -語言-
/std:<c++14|c++17|c++20|c++latest> C++ 標(biāo)準(zhǔn)版
? ? c++14 - ISO/IEC 14882:2014 (默認(rèn)值)
? ? c++17 - ISO/IEC 14882:2017
? ? c++20 - ISO/IEC 14882:2020
? ? c++latest - 最新草案標(biāo)準(zhǔn)(功能集可能更改)
/permissive[-] 使某些非符合代碼可編譯(功能集可更改)(默認(rèn)開啟)
/Ze 啟用擴(kuò)展(默認(rèn))? ? ? ? ? ? ? ? ? ? ? /Za 禁用擴(kuò)展
/ZW 啟用 WinRT 語言擴(kuò)展? ? ? ? ? ? ? ? ?/Zs 只進(jìn)行語法檢查
/Zc:arg1[,arg2] C++ 語言合規(guī)性,這里的參數(shù)可以是:
?forScope[-]? ? ? 對范圍規(guī)則強(qiáng)制使用標(biāo)準(zhǔn) C++
?wchar_t[-]? ? ? wchar_t 是本機(jī)類型,不是 typedef
? auto[-]? ? ? ? ? ? ? ?對 auto 強(qiáng)制使用新的標(biāo)準(zhǔn) C++ 含義
? trigraphs[-]? ? ? ? ? 啟用三元祖(默認(rèn)關(guān)閉)
?rvalueCast[-]? ? ?強(qiáng)制實(shí)施標(biāo)準(zhǔn) C++ 顯式類型轉(zhuǎn)換規(guī)則
?strictStrings[-]? ?禁用從字符串文本到 [char|wchar_t]*
? ? ? ? ? ? ? ? ? ? ? ? 的轉(zhuǎn)換(默認(rèn)關(guān)閉)
?implicitNoexcept[-]? 在必需的函數(shù)上啟用隱式 noexcept
threadSafeInit[-]? ?啟用線程安全的本地靜態(tài)初始化
? inline[-]? ? ? ? ? ? ?如果是 COMDAT,則刪除未引用的函數(shù)或數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? 或僅使用內(nèi)部鏈接(默認(rèn)關(guān)閉)
? sizedDealloc[-]? ? ? ?啟用 C++14 全局大小解除分配
? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)(默認(rèn)開啟)
? throwingNew[-]? ? ? ? 假設(shè)運(yùn)算符 new 在故障時(shí)引發(fā)(默認(rèn)關(guān)閉)
? referenceBinding[-]? ?臨時(shí)引用不會(huì)綁定到非常數(shù)
? ? ? ? ? ? ? ? ? ? ? ? lvalue 引用(默認(rèn)關(guān)閉)
? twoPhase-? ? ? ? ? ? ?禁用兩階段名稱查找
? ternary[-]? ? ? ? ? ? 對條件運(yùn)算符強(qiáng)制使用 C++11 規(guī)則(默認(rèn)關(guān)閉)
? noexceptTypes[-]? ? ? 強(qiáng)制執(zhí)行 C++17 noexcept 規(guī)則(在 C++17 或更高版本中默認(rèn)開啟)
? alignedNew[-]? ? ? ? ?對動(dòng)態(tài)分配的對象啟用 C++17 對齊方式(默認(rèn)開啟)
? hiddenFriend[-]? ? ? ?強(qiáng)制實(shí)施標(biāo)準(zhǔn) C++ 隱藏好友規(guī)則(/permissive- 所隱含)
? externC[-]? ? ? ? ? ? 強(qiáng)制實(shí)施外部 "C" 函數(shù)的標(biāo)準(zhǔn) C++ 規(guī)則(/permissive- 所隱含)
? lambda[-]? ? ? ? ? ? ?使用更新的 lambda 處理器提供更好的 lambda 支持(默認(rèn)為關(guān)閉)
? tlsGuards[-]? ? ? ? ? 生成 TLS 變量初始化的運(yùn)行時(shí)檢查(默認(rèn)情況下啟用)
? zeroSizeArrayNew[-]? ?針對大小為零的對象數(shù)組的調(diào)用對象 new/delete (默認(rèn)啟用)
? static_assert[-] 嚴(yán)格處理 "static_assert" (由 /permissive- 隱含)
? gotoScope[-]? ? ? ? ? 無法跳過變量的初始化(由 /permissive- 暗示)
? templateScope[-]? ? ? 強(qiáng)制執(zhí)行標(biāo)準(zhǔn) C++ 模板參數(shù)陰影規(guī)則
? enumTypes[-]? ? ? ? ? 啟用標(biāo)準(zhǔn) C++ 基礎(chǔ)枚舉類型(默認(rèn)情況下關(guān)閉)
? checkGwOdr[-]? ? ? ? ?強(qiáng)制執(zhí)行標(biāo)準(zhǔn) C++ 一個(gè)定義規(guī)則沖突
? ? ? ? ? ? ? ? ? ? ? ? 當(dāng) /Gw 已啟用時(shí)(默認(rèn)關(guān)閉)
? __STDC__在 C 中將 __STDC__ 定義為 1? ?
/await 啟用可恢復(fù)函數(shù)擴(kuò)展
/await:strict 啟用使用早期語言版本的標(biāo)準(zhǔn) C++20 協(xié)同例程支持
/constexpr:depth<N>? ? ?constexpr 評估的遞歸深度限制(默認(rèn)值: 512)
/constexpr:backtrace<N> 在診斷中顯示 N constexpr 評估(默認(rèn)值: 10)
/constexpr:steps<N>? ? ?在 N 個(gè)步驟后終止 constexpr 評估(默認(rèn)值: 100000)
/Zi 啟用調(diào)試信息? ? ? ? ? ? ? ? ? ? ? ? /Z7 啟用舊式調(diào)試信息
/Zo[-] 為優(yōu)化的代碼生成更豐富的調(diào)試信息(默認(rèn)開啟)
/ZH:[MD5|SHA1|SHA_256] 哈希算法,用于在調(diào)試信息中計(jì)算文件校驗(yàn)和(默認(rèn)值: SHA_256)
/Zp[n] 在 n 字節(jié)邊界上包裝結(jié)構(gòu)? ? ? ? ? /Zl 省略 .OBJ 中的默認(rèn)庫名
/vd{0|1|2} 禁用/啟用 vtordisp? ? ? ? ? ?/vm<x> 指向成員的指針類型
/std:<c11|c17> C 標(biāo)準(zhǔn)版本
? ? c11 - ISO/IEC 9899:2011
? ? c17 - ISO/IEC 9899:2018
/ZI 啟用“編輯并繼續(xù)”調(diào)試信息? ? ? ? ? /openmp 啟用 OpenMP 2.0 語言擴(kuò)展
/openmp:experimental 會(huì)啟用 OpenMP 2.0 語言擴(kuò)展并選擇 OpenMP 3.0+ 語言擴(kuò)展
使用 LLVM 運(yùn)行時(shí) /openmp:llvm OpenMP 語言擴(kuò)展
? ? ? ? ? ? ? ?- 雜項(xiàng) -
@<file> 選項(xiàng)響應(yīng)文件? ? ? ? ? ? ? ? ? ? /?, /help 打印此幫助消息
/bigobj 生成擴(kuò)展的對象格式? ? ? ? ? ? ? /c 只編譯,不鏈接
/errorReport:option 已棄用。請將內(nèi)部編譯器錯(cuò)誤報(bào)告給 Microsoft
? ? none - 不發(fā)送報(bào)告? ? ? ? ? ? ? ? ? ? ? ?prompt - 提示立即發(fā)送報(bào)告
? ? queue - 在下一次管理員登錄時(shí),提示發(fā)送報(bào)告(默認(rèn))
? ? send - 自動(dòng)發(fā)送報(bào)告? ? ? ? ? ? ? ? ?/FC 診斷中使用完整路徑名
/H<num> 最大外部名稱長度? ? ? ? ? ? ? ? /J 默認(rèn) char 類型是 unsigned
/MP[n] 最多使用“n”個(gè)進(jìn)程進(jìn)行編譯? ? ? /nologo 取消顯示版權(quán)信息
/showIncludes 顯示包含文件名? ? ? ? ? ? /Tc<source file> 將文件編譯為 .c
/Tp<source file> 將文件編譯為 .cpp? ? ? /TC 將所有文件編譯為 .c
/TP 將所有文件編譯為 .cpp? ? ? ? ? ? ? ?/V<string> 設(shè)置版本字符串
/Yc[file] 創(chuàng)建 .PCH 文件? ? ? ? ? ? ? ? /Yd 將調(diào)試信息放在每個(gè) .OBJ 中
/Yl[sym] 為調(diào)試庫插入 .PCH 引用? ? ? ? ?/Yu[file] 使用 .PCH 文件
/Y- 禁用所有 PCH 選項(xiàng)? ? ? ? ? ? ? ? ? ?/Zm<n> 最大內(nèi)存分配(默認(rèn)值的百分比)
/FS 強(qiáng)制使用 MSPDBSRV.EXE? ? ? ? ? ? ? ?
/source-charset:<iana-name>|.nnnn 集源字符集
/execution-charset:<iana-name>|.nnnn 集執(zhí)行字符集
/utf-8 集源和到 UTF-8 的執(zhí)行字符集? ? ??
/validate-charset[-] 驗(yàn)證 UTF-8 文件是否只有合法字符
/fastfail[-] 啟用 fast-fail 模式? ? ? ? /JMC[-] 啟用本機(jī)“僅我的代碼”
/presetPadding[-] 將基于堆棧的類類型的填充初始化為零
/volatileMetadata[-] 對易失存儲(chǔ)器訪問生成元數(shù)據(jù)
/sourcelink [file] 包含源鏈接信息的文件?
? ? ? ? ? ? ? ? -鏈接-
/LD 創(chuàng)建 .DLL? ? ? ? ? ? ? ? ? ? ? ? ? ?/LDd 創(chuàng)建 .DLL 調(diào)試庫
/LN 創(chuàng)建 .netmodule? ? ? ? ? ? ? ? ? ? ?/F<num> 設(shè)置堆棧大小
/link [鏈接器選項(xiàng)和庫]? ? ? ? ? ? ? ? ? /MD 與 MSVCRT.LIB 鏈接
/MT 與 LIBCMT.LIB 鏈接? ? ? ? ? ? ? ? ? /MDd 與 MSVCRTD.LIB 調(diào)試庫鏈接
/MTd 與 LIBCMTD.LIB 調(diào)試庫鏈接? ? ? ? ??
? ? ? ? ? ? ? ?-代碼分析-
/analyze[-] 啟用本機(jī)分析? ? ? ? ? ? ? ? /analyze:quiet[-] 沒有對控制臺(tái)的警告
/analyze:log<name> 對文件的警告? ? ? ? ?/analyze:autolog Log to *.pftlog
/analyze:autolog:ext<ext> Log to *.<ext>/analyze:autolog- 無日志文件
/analyze:WX- 警告不嚴(yán)重? ? ? ? ? ? ? ? ?/analyze:stacksize<num> 最大堆棧幀
/analyze:max_paths<num> 最大路徑? ? ? ? /analyze:only Analyze, no code gen
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -診斷-
/diagnostics:<args,...> 控制診斷消息的格式:
? ? ? ? ? ? ?傳統(tǒng)型 - 保留之前的格式
? ? ? ? ? ? ?列[-] - 打印列信息
? ? ? ? ? ? ?脫字號(hào)[-] - 打印列和源的指示行
/Wall 啟用所有警告? ? ? ? ? ? ? ? ? ? ? /w? ?禁用所有警告
/W<n> 設(shè)置警告等級(jí)(默認(rèn) n=1)? ? ? ? ? ??
/Wv:xx[.yy[.zzzzz]] 禁用在 xx.yy.zzzzz 版本后引入的警告功能
/WX 將警告視為錯(cuò)誤? ? ? ? ? ? ? ? ? ? ? /WL 啟用單行診斷
/wd<n> 禁用警告 n? ? ? ? ? ? ? ? ? ? ? ?/we<n> 將警告 n 視為錯(cuò)誤
/wo<n> 發(fā)出一次警告 n? ? ? ? ? ? ? ? ? ?/w<l><n> 為 n 設(shè)置警告等級(jí) 1-4
/external:I <path>? ? ? - 外部標(biāo)頭的位置
/external:env:<var>? ? - 外部標(biāo)頭位置的環(huán)境變量
/external:anglebrackets - 將所有通過 <> 包含的標(biāo)頭視為外部
/external:W<n>? ? ? ? ? - 外部標(biāo)頭的警告等級(jí)
/external:templates[-]? - 跨模板實(shí)例化鏈評估警告級(jí)別
/sdl 支持其他安全功能和警告? ? ? ? ? ? ?
/選項(xiàng): 嚴(yán)格無法識(shí)別的編譯器選項(xiàng)是一個(gè)錯(cuò)誤