1. 程式人生 > >(轉載)gcc編譯選項總結

(轉載)gcc編譯選項總結

轉載自:https://blog.csdn.net/gatieme/article/details/21389603

常用編譯選項

gcc and g++分別是gnu的c & c++編譯器 gcc/g++在執行編譯工作的時候,總共需要4步

1.預處理,生成.i的檔案[前處理器cpp]
2.將預處理後的檔案不轉換成組合語言,生成檔案.s[編譯器egcs]
3.有彙編變為目的碼(機器程式碼)生成.o的檔案[彙編器as]
4.連線目的碼,生成可執行程式[連結器ld]

gcc 命令的常用選項

選項 解釋
-ansi 只支援 ANSI 標準的 C 語法。這一選項將禁止 GNU C 的某些特色,
例如 asm 或 typeof 關鍵詞。
-c 只編譯並生成目標檔案。
-DMACRO 以字串“1”定義 MACRO 巨集。
-DMACRO=DEFN 以字串“DEFN”定義 MACRO 巨集。
-E 只執行 C 預編譯器。
-g 生成除錯資訊。GNU 偵錯程式可利用該資訊。
-IDIRECTORY 指定額外的標頭檔案搜尋路徑DIRECTORY。
-LDIRECTORY 指定額外的函式庫搜尋路徑DIRECTORY。
-lLIBRARY 連線時搜尋指定的函式庫LIBRARY。
-m486 針對 486 進行程式碼優化。
-o FILE 生成指定的輸出檔案。用在生成可執行檔案時。
-O0 不進行優化處理。
-O 或 -O1 優化生成程式碼。
-O2 進一步優化。
-O3 比 -O2 更進一步優化,包括 inline 函式。
-shared 生成共享目標檔案。通常用在建立共享庫時。
-static 禁止使用共享連線。
-UMACRO 取消對 MACRO 巨集的定義。
-w 不生成任何警告資訊。
-Wall 生成所有警告資訊。

引數詳解

-x language filename
  設定檔案所使用的語言,使字尾名無效,對以後的多個有效.也就是根據約定C語言的後
綴名稱是.c的,而C++的字尾名是.C或者.cpp,如果你很個性,決定你的C程式碼檔案的字尾
名是.pig 哈哈,那你就要用這個引數,這個引數對他後面的檔名都起作用,除非到了
下一個引數的使用。
  可以使用的引數嗎有下面的這些
  c, objective-c, c-header, c++, cpp-output, assembler, and a
ssembler-with-cpp`.
  看到英文,應該可以理解的。
  例子用法:
  gcc -x c hello.pig
  
-x none filename
  關掉上一個選項,也就是讓gcc根據檔名字尾,自動識別檔案型別
  例子用法:
  gcc -x c hello.pig -x none hello2.c
  
-c
  只啟用預處理,編譯,和彙編,也就是他只把程式做成obj檔案
  例子用法:
  gcc -c hello.c
  他將生成.o的obj檔案
-S
  只啟用預處理和編譯,就是指把檔案編譯成為彙編程式碼。
  例子用法
  gcc -S hello.c
  他將生成.s的彙編程式碼,你可以用文字編輯器察看
-E
  只啟用預處理,這個不生成檔案,你需要把它重定向到一個輸出檔案裡面.
  例子用法:
  gcc -E hello.c > pianoapan.txt
  gcc -E hello.c | more
  慢慢看吧,一個hello word 也要與處理成800行的程式碼
-o
  制定目標名稱,預設的時候,gcc 編譯出來的檔案是a.out,很難聽,如果你和我有同感
,改掉它,哈哈
  例子用法
  gcc -o hello.exe hello.c (哦,windows用習慣了)
  gcc -o hello.asm -S hello.c
-pipe
  使用管道代替編譯中臨時檔案,在使用非gnu彙編工具的時候,可能有些問題
  gcc -pipe -o hello.exe hello.c
-ansi
  關閉gnu c中與ansi c不相容的特性,啟用ansi c的專有特性(包括禁止一些asm inl
ine typeof關鍵字,以及UNIX,vax等預處理巨集,
-fno-asm
  此選項實現ansi選項的功能的一部分,它禁止將asm,inline和typeof用作關鍵字。
    
-fno-strict-prototype
  只對g++起作用,使用這個選項,g++將對不帶引數的函式,都認為是沒有顯式的對引數
的個數和型別說明,而不是沒有引數.
  而gcc無論是否使用這個引數,都將對沒有帶引數的函式,認為城沒有顯式說明的型別

  
-fthis-is-varialble
  就是向傳統c++看齊,可以使用this當一般變數使用.
  
-fcond-mismatch
  允許條件表示式的第二和第三引數型別不匹配,表示式的值將為void型別
  
-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
  這四個引數是對char型別進行設定,決定將char型別設定成unsigned char(前兩個參
數)或者 signed char(後兩個引數)
  
-include file
  包含某個程式碼,簡單來說,就是便以某個檔案,需要另一個檔案的時候,就可以用它設
定,功能就相當於在程式碼中使用#include
  例子用法:
  gcc hello.c -include /root/pianopan.h
  
-imacros file
  將file檔案的巨集,擴充套件到gcc/g++的輸入檔案,巨集定義本身並不出現在輸入檔案中
  
-Dmacro
  相當於C語言中的#define macro
  
-Dmacro=defn
  相當於C語言中的#define macro=defn
  
-Umacro
  相當於C語言中的#undef macro
-undef
  取消對任何非標準巨集的定義
  
-Idir
  在你是用#include"file"的時候,gcc/g++會先在當前目錄查詢你所制定的標頭檔案,如
果沒有找到,他回到預設的標頭檔案目錄找,如果使用-I制定了目錄,他
  回先在你所制定的目錄查詢,然後再按常規的順序去找.
  對於#include ,gcc/g++會到-I制定的目錄查詢,查詢不到,然後將到系統的缺
省的標頭檔案目錄查詢
  
-I-
  就是取消前一個引數的功能,所以一般在-Idir之後使用
  
-idirafter dir
  在-I的目錄裡面查詢失敗,講到這個目錄裡面查詢.
  
-iprefix prefix
-iwithprefix dir
  一般一起使用,當-I的目錄查詢失敗,會到prefix+dir下查詢
  
-nostdinc
  使編譯器不再系統預設的標頭檔案目錄裡面找標頭檔案,一般和-I聯合使用,明確限定頭
檔案的位置
  
-nostdin C++
  規定不在g++指定的標準路經中搜索,但仍在其他路徑中搜索,.此選項在創libg++庫
使用
  
-C
  在預處理的時候,不刪除註釋資訊,一般和-E使用,有時候分析程式,用這個很方便的

  
-M
  生成檔案關聯的資訊。包含目標檔案所依賴的所有原始碼你可以用gcc -M hello.c
來測試一下,很簡單。
  
-MM
  和上面的那個一樣,但是它將忽略由#include 造成的依賴關係。
  
-MD
  和-M相同,但是輸出將匯入到.d的檔案裡面
  
-MMD
  和-MM相同,但是輸出將匯入到.d的檔案裡面
  
-Wa,option
  此選項傳遞option給彙編程式;如果option中間有逗號,就將option分成多個選項,然
後傳遞給會彙編程式
  
-Wl.option
  此選項傳遞option給連線程式;如果option中間有逗號,就將option分成多個選項,然
後傳遞給會連線程式.
  
-llibrary
  制定編譯的時候使用的庫
  例子用法
  gcc -lcurses hello.c
  使用ncurses庫編譯程式
  
-Ldir
  制定編譯的時候,搜尋庫的路徑。比如你自己的庫,可以用它制定目錄,不然
  編譯器將只在標準庫的目錄找。這個dir就是目錄的名稱。
  
-O0
-O1
-O2
-O3
  編譯器的優化選項的4個級別,-O0表示沒有優化,-O1為預設值,-O3優化級別最高 
    
-g
  只是編譯器,在編譯的時候,產生除錯資訊。
  
-gstabs
  此選項以stabs格式聲稱除錯資訊,但是不包括gdb除錯資訊.
  
-gstabs+
  此選項以stabs格式聲稱除錯資訊,並且包含僅供gdb使用的額外除錯資訊.
  
-ggdb
  此選項將盡可能的生成gdb的可以使用的除錯資訊.
-static
  此選項將禁止使用動態庫,所以,編譯出來的東西,一般都很大,也不需要什麼
動態連線庫,就可以執行.
-share
  此選項將盡量使用動態庫,所以生成檔案比較小,但是需要系統由動態庫.
-traditional
  試圖讓編譯器支援傳統的C語言特性

警告資訊控制選項

下列選項控制編譯器警告資訊:
--all-warnings 此開關缺少可用文件
--extra-warnings 此開關缺少可用文件
-W 不建議使用此開關;請改用 -Wextra
-Wabi 當結果與 ABI
相容的編譯器的編譯結果不同時給出警告
-Waddress 使用可疑的記憶體地址時給出警告
-Waggregate-return 當返回結構、聯合或陣列時給出警告
-Waliasing 為可能的虛參重疊給出警告
-Walign-commons 對 COMMON 塊對齊的警告
-Wall 啟用大部分警告資訊
-Wampersand 若延續字元常量中缺少 & 則給出警告
-Warray-bounds 當陣列訪問越界時給出警告
-Warray-temporaries 建立臨時陣列時給出警告
-Wassign-intercept 當 Objective-C
賦值可能為垃圾回收所介入時給出警告
-Wattributes 當對屬性的使用不合適時給出警告
-Wbad-function-cast 當把函式轉換為不相容型別時給出警告
-Wbuiltin-macro-redefined 當內建預處理巨集未定義或重定義時給出警告
-Wc++-compat 當在 C 語言中使用了 C 與 C++
交集以外的構造時給出警告
-Wc++0x-compat 當 C++ 構造的意義在 ISO C++ 1998 和 ISO
C++ 200x 中不同時給出警告
-Wcast-align 當轉換指標型別導致對齊邊界增長時給出警告
-Wcast-qual 當型別轉換丟失限定資訊時給出警告
-Wchar-subscripts 當下標型別為“char”時給出警告
-Wcharacter-truncation 對被截斷的字元表示式給出警告
-Wclobbered 對能為"longjmp"或"vfork"所篡改的變數給出警告
-Wcomment 對可能巢狀的註釋和長度超過一個物理行長的
C++ 註釋給出警告
-Wcomments -Wcomment 的同義詞
-Wconversion 當隱式型別轉換可能改變值時給出警告
-Wconversion-extra 對大多數隱式型別轉換給出警告
-Wconversion-null 將 NULL 轉換為非指標型別時給出警告
-Wcoverage-mismatch Warn in case profiles in -fprofile-use do not
match
-Wcpp Warn when a #warning directive is encountered
-Wctor-dtor-privacy 當所有建構函式和解構函式都是私有時給出警告
-Wdeclaration-after-statement 當宣告出現在語句後時給出警告
-Wdeprecated 使用不建議的編譯器特性、類、方法或欄位時給出警告
-Wdeprecated-declarations 對 attribute((deprecated)) 宣告給出警告
-Wdisabled-optimization 當某趟優化被禁用時給出警告
-Wdiv-by-zero 對編譯時發現的零除給出警告
-Wdouble-promotion 對從“float”到“double”的隱式轉換給出警告
-Weffc++ 對不遵循《Effetive
C++》的風格給出警告
-Wempty-body 當 if 或 else 語句體為空時給出警告
-Wendif-labels 當 #elif 和 #endif
後面跟有其他識別符號時給出警告
-Wenum-compare 對不同列舉型別之間的比較給出警告
-Werror-implicit-function-declaration 不建議使用此開關;請改用
-Werror=implicit-function-declaration
-Wextra 列印額外(可能您並不想要)的警告資訊
-Wfloat-equal 當比較浮點數是否相等時給出警告
-Wformat 對 printf/scanf/strftime/strfmon
中的格式字串異常給出警告
-Wformat-contains-nul 當格式字串包含 NUL 位元組時給出警告
-Wformat-extra-args 當傳遞給格式字串的引數太多時給出警告
-Wformat-nonliteral 當格式字串不是字面值時給出警告
-Wformat-security 當使用格式字串的函式可能導致安全問題時給出警告
-Wformat-y2k 當 strftime 格式給出 2
位記年時給出警告
-Wformat-zero-length 對長度為 0 的格式字串給出警告
-Wformat= 此開關缺少可用文件
-Wignored-qualifiers 當型別限定符被忽略時給出警告。
-Wimplicit 對隱式函式宣告給出警告
-Wimplicit-function-declaration 對隱式函式宣告給出警告
-Wimplicit-int 當宣告未指定型別時給出警告
-Wimplicit-interface 對帶有隱式介面的呼叫給出警告
-Wimplicit-procedure 對沒有隱式宣告的過程呼叫給出警告
-Winit-self 對初始化為自身的變數給出警告。
-Winline 當行內函數無法被內聯時給出警告
-Wint-to-pointer-cast 當將一個大小不同的整數轉換為指標時給出警告
-Wintrinsic-shadow 如果使用者過程有與內建過程相同的名字則警告
-Wintrinsics-std 當內建函式不是所選標準的一部分時給出警告
-Winvalid-offsetof 對“offsetof”巨集無效的使用給出警告
-Winvalid-pch 在找到了 PCH
檔案但未使用的情況給出警告
-Wjump-misses-init 當跳轉略過變數初始化時給出警告
-Wlarger-than- 此開關缺少可用文件
-Wlarger-than= 當目標檔案大於 N 位元組時給出警告
-Wline-truncation 對被截斷的原始檔行給出警告
-Wlogical-op 當邏輯操作結果似乎總為真或假時給出警告
-Wlong-long 當使用 -pedantic 時不對“long
long”給出警告
-Wmain 對可疑的“main”宣告給出警告
-Wmissing-braces 若初始值設定項中可能缺少花括號則給出警告
-Wmissing-declarations 當全域性函式沒有前向宣告時給出警告
-Wmissing-field-initializers 若結構初始值設定項中缺少欄位則給出警告
-Wmissing-format-attribute 當函式可能是 format
屬性的備選時給出警告
-Wmissing-include-dirs 當用戶給定的包含目錄不存在時給出警告
-Wmissing-noreturn 當函式可能是 attribute((noreturn))
的備選時給出警告
-Wmissing-parameter-type K&R
風格函式引數宣告中未指定型別限定符時給出警告
-Wmissing-prototypes 全域性函式沒有原型時給出警告
-Wmudflap 當構造未被 -fmudflap 處理時給出警告
-Wmultichar 使用多位元組字符集的字元常量時給出警告
-Wnested-externs 當“extern”宣告不在檔案作用域時給出警告
-Wnoexcept Warn when a noexcept expression evaluates to
false even though the expression can't actually
throw
-Wnon-template-friend 在模板內宣告未模板化的友元函式時給出警告
-Wnon-virtual-dtor 當解構函式不是虛擬函式時給出警告
-Wnonnull 當將 NULL 傳遞給需要非 NULL
的引數的函式時給出警告
-Wnormalized=<id|nfc|nfkc> 對未歸一化的 Unicode 字串給出警告
-Wold-style-cast 程式使用 C
風格的型別轉換時給出警告
-Wold-style-declaration 對宣告中的過時用法給出警告
-Wold-style-definition 使用舊式形參定義時給出警告
-Woverflow 算術表示式溢位時給出警告
-Woverlength-strings 當字串長度超過標準規定的可移植的最大長度時給出警告
-Woverloaded-virtual 過載虛擬函式名時給出警告
-Woverride-init 覆蓋無副作用的初始值設定時給出警告
-Wpacked 當 packed
屬性對結構佈局不起作用時給出警告
-Wpacked-bitfield-compat 當緊實位段的偏移量因 GCC 4.4
而改變時給出警告
-Wpadded 當需要填補才能對齊結構成員時給出警告
-Wparentheses 可能缺少括號的情況下給出警告
-Wpmf-conversions 當改變成員函式指標的型別時給出警告
-Wpointer-arith 當在算術表示式中使用函式指標時給出警告
-Wpointer-sign 賦值時如指標符號不一致則給出警告
-Wpointer-to-int-cast 將一個指標轉換為大小不同的整數時給出警告
-Wpragmas 對錯誤使用的 pragma 加以警告
-Wproperty-assign-default Warn if a property for an Objective-C object has
no assign semantics specified
-Wprotocol 當繼承來的方法未被實現時給出警告
-Wreal-q-constant Warn about real-literal-constants with 'q'
exponent-letter
-Wredundant-decls 對同一個物件多次宣告時給出警告
-Wreorder 編譯器將程式碼重新排序時給出警告
-Wreturn-type 當 C
函式的返回值預設為“int”,或者 C++
函式的返回型別不一致時給出警告
-Wselector 當選擇子有多個方法時給出警告
-Wsequence-point 當可能違反定序點規則時給出警告
-Wshadow 當一個區域性變數掩蓋了另一個區域性變數時給出警告
-Wsign-compare 在有符號和無符號數間進行比較時給出警告
-Wsign-promo 當過載將無符號數提升為有符號數時給出警告
-Wstack-protector 當因為某種原因堆疊保護失效時給出警告
-Wstrict-aliasing 當代碼可能破壞強重疊規則時給出警告
-Wstrict-aliasing= 當代碼可能破壞強重疊規則時給出警告
-Wstrict-null-sentinel 將未作轉換的 NULL
用作哨兵時給出警告
-Wstrict-overflow 禁用假定有符號數溢位行為未被定義的優化
-Wstrict-overflow= 禁用假定有符號數溢位行為未被定義的優化
-Wstrict-prototypes 使用了非原型的函式宣告時給出警告
-Wstrict-selector-match 當備選方法的型別簽字不完全匹配時給出警告
-Wsuggest-attribute=const Warn about functions which might be candidates
for attribute((const))
-Wsuggest-attribute=noreturn 當函式可能是 attribute((noreturn))
的備選時給出警告
-Wsuggest-attribute=pure Warn about functions which might be candidates
for attribute((pure))
-Wsurprising 對“可疑”的構造給出警告
-Wswitch 當使用列舉型別作為開關變數,沒有提供
default 分支,但又缺少某個 case
時給出警告
-Wswitch-default 當使用列舉型別作為開關變數,但沒有提供“default”分支時給出警告
-Wswitch-enum 當使用列舉型別作為開關變數但又缺少某個
case 時給出警告
-Wsync-nand 當 __sync_fetch_and_nand 和
__sync_nand_and_fetch
內建函式被使用時給出警告
-Wsynth 不建議使用。此開關不起作用。
-Wsystem-headers 不抑制系統標頭檔案中的警告
-Wtabs 允許使用不符合規範的製表符
-Wtraditional 使用了傳統 C
不支援的特性時給出警告
-Wtraditional-conversion 原型導致的型別轉換與無原型時的型別轉換不同時給出警告
-Wtrampolines Warn whenever a trampoline is generated
-Wtrigraphs 當三字母序列可能影響程式意義時給出警告
-Wtype-limits 當由於資料類型範圍限制比較結果永遠為真或假時給出警告
-Wundeclared-selector 當使用 @selector()
卻不作事先宣告時給出警告
-Wundef 當 #if
指令中用到未定義的巨集時給出警告
-Wunderflow 數字常量表達式下溢時警告
-Wuninitialized 自動變數未初始化時警告
-Wunknown-pragmas 對無法識別的 pragma 加以警告
-Wunsafe-loop-optimizations 當迴圈因為不平凡的假定而不能被優化時給出警告
-Wunsuffixed-float-constants 對不帶字尾的浮點常量給出警告
-Wunused 啟用所有關於“XX未使用”的警告
-Wunused-but-set-parameter Warn when a function parameter is only set,
otherwise unused
-Wunused-but-set-variable Warn when a variable is only set, otherwise unused
-Wunused-dummy-argument 對未使用的啞元給出警告。
-Wunused-function 有未使用的函式時警告
-Wunused-label 有未使用的標號時警告
-Wunused-macros 當定義在主檔案中的巨集未被使用時給出警告
-Wunused-parameter 發現未使用的函式指標時給出警告
-Wunused-result 當一個帶有 warn_unused_result
屬性的函式的呼叫者未使用前者的返回值時給出警告
-Wunused-value 當一個表示式的值未被使用時給出警告
-Wunused-variable 有未使用的變數時警告
-Wvariadic-macros 指定 -pedantic
時不為可變引數巨集給出警告
-Wvla 使用變長陣列時警告
-Wvolatile-register-var 當一個暫存器變數被宣告為 volatile
時給出警告
-Wwrite-strings 在 C++
中,非零值表示將字面字串轉換為‘char
*’時給出警告。在 C
中,給出相似的警告,但這種型別轉換是符合
ISO C 標準的。
-frequire-return-statement Functions which return values must end with
return statements

其他編譯選項

-o 設定輸出檔名
-c 只編譯,不連線.
-E 只做預編譯.
-pipe 在多個編譯過程之間使用管道.
--version 顯示版本.
-static 靜態連線.
-ansi C 模式下支援所有 ISO C90 標準的 C 程式, C++ 模式下去除對 GNU C++ 擴充套件的支援(GNU擴充套件會與 ISO C++ 衝突)
-std= 確定編譯語言的標準,目前只在編譯 C 和 C++ 時有效 -fno-asm 不將 "asm" "inline" "typeof" 作為關鍵字,可以用他們做變數名等. -funsigned-char 將"char"的資料型別設為"unsigned",即無符號.
-fsigned-char 正好相反,將"char"設為"signed".
-fsyntax-only 只檢查語法錯誤,不做其他任何事.
-pedantic 顯示所有的 ISO C 和 ISO C++ 的警告,並且拒絕所有使用禁止擴充套件的程式
-Wall 顯示所有警告
-g 將編譯時的除錯資訊儲存到本地檔案中( stabs,COFF,XCOFF,DWARF)
-ggdb 為 GDB 產生除錯資訊,包含 GDB 的擴充套件.
-ggdb(level) 設定產生何種等級的除錯資訊, level 為 1-3, 1 最少,3 最多.
-ftime-reprot 統計編譯消耗的時間並顯示報告.
-fmem-report 顯示所有的靜態記憶體分配.
-ftest-coverages 為 gcov工具產生資料檔案.

gcc 編譯選項

優化

-O1 最小化空間 minimize space
-Op[-] 改善浮點數一致性 improve floating-pt consistency
-O2 最大化速度 maximize speed
-Os 優選程式碼空間 favor code space
-Oa 假設沒有別名 assume no aliasing
-Ot 優選程式碼速度 favor code speed
-Ob 內聯展開(預設 n=0) inline expansion (default n=0)
-Ow 假設交叉函式別名 assume cross-function aliasing
-Od 禁用優化(預設值) disable optimizations (default)
-Ox 最大化選項。(-Ogityb2 -Gs) maximum opts. (-Ogityb1 -Gs)
-Og 啟用全域性優化 enable global optimization
-Oy[-] 啟用框架指標省略 enable frame pointer omission
-Oi 啟用內建函式 enable intrinsic functions

程式碼生成

-G3 為 80386 進行優化 optimize for 80386
-G4 為 80486 進行優化 optimize for 80486
-GR[-] 啟用 C++ RTTI enable C++ RTTI
-G5 為 Pentium 進行優化 optimize for Pentium
-G6 為 Pentium Pro 進行優化 optimize for Pentium Pro
-GX[-] 啟用 C++ 異常處理(與 -EHsc 相同) enable C++ EH (same as -EHsc)
-EHs 啟用同步 C++ 異常處理 enable synchronous C++ EH
-GD 為 Windows DLL 進行優化 optimize for Windows DLL
-GB 為混合模型進行優化(預設) optimize for blended model (default)
-EHa 啟用非同步 C++ 異常處理 enable asynchronous C++ EH
-Gd __cdecl 呼叫約定 __cdecl calling convention
-EHc extern“C”預設為 nothrow extern "C" defaults to nothrow
-Gr __fastcall 呼叫約定 __fastcall calling convention
-Gi[-] 啟用增量編譯 enable incremental compilation
-Gz __stdcall 呼叫約定 __stdcall calling convention
-Gm[-] 啟用最小重新生成 enable minimal rebuild
-GA 為 Windows 應用程式進行優化 optimize for Windows Application
-Gf 啟用字串池 enable string pooling
-QIfdiv[-] 啟用 Pentium FDIV 修復 enable Pentium FDIV fix
-GF 啟用只讀字串池 enable read-only string pooling
-QI0f[-] 啟用 Pentium 0x0f 修復 enable Pentium 0x0f fix
-Gy 分隔連結器函式 separate functions for linker
-GZ 啟用執行時除錯檢查 enable runtime debug checks
-Gh 啟用鉤子函式呼叫 enable hook function call
-Ge 對所有函式強制堆疊檢查 force stack checking for all funcs
-Gs[num] 禁用堆疊檢查呼叫 disable stack checking calls

輸出檔案

-Fa[file] 命名程式集列表檔案 name assembly listing file
-Fo 命名物件檔案 name object file
-FA[sc] 配置程式集列表 configure assembly listing
-Fp 命名預編譯標頭檔案 name precompiled header file
-Fd[file] 命名 .PDB 檔案 name .PDB file
-Fr[file] 命名源瀏覽器檔案 name source browser file
-Fe 命名可執行檔案 name executable file
-FR[file] 命名擴充套件 .SBR 檔案 name extended .SBR file
-Fm[file] 命名對映檔案 name map file

前處理器

-FI 命名強制包含檔案 name forced include file
-C 不吸取註釋 don't strip comments
-U 移除預定義巨集 remove predefined macro
-D{=|#} 定義巨集 define macro
-u 移除所有預定義巨集 remove all predefined macros
-E 將預處理定向到標準輸出 preprocess to stdout
-I 新增到包含檔案的搜尋路徑 add to include search path
-EP 將預處理定向到標準輸出,不要帶行號 preprocess to stdout, no #line
-X 忽略“標準位置” ignore "standard places"
-P 預處理到檔案 preprocess to file

語言

-Zi 啟用除錯資訊 enable debugging information
-Zl 忽略 .OBJ 中的預設庫名 omit default library name in .OBJ
-ZI 啟用除錯資訊的“編輯並繼續”功能 enable Edit and Continue debug info
-Zg 生成函式原型 generate function prototypes
-Z7 啟用舊式除錯資訊 enable old-style debug info
-Zs 只進行語法檢查 syntax check only
-Zd 僅要行號除錯資訊 line number debugging info only
-vd{0|1} 禁用-啟用 vtordisp disable-enable vtordisp
-Zp[n] 在 n 位元組邊界上包裝結構 pack structs on n-byte boundary
-vm 指向成員的指標型別 type of pointers to members
-Za 禁用擴充套件(暗指 -Op) disable extensions (implies -Op)
-noBool 禁用“bool”關鍵字 disable "bool" keyword
-Ze 啟用擴充套件(預設) enable extensions (default)

雜項

-?, -help 列印此幫助訊息 print this help message
-c 只編譯,不連結 compile only, no link
-W 設定警告等級(預設 n=1) set warning level (default n=1)
-H 最大化外部名稱長度 max external name length
-J 預設 char 型別是 unsigned default char type is unsigned
-nologo 取消顯示版權訊息 suppress copyright message
-WX 將警告視為錯誤 treat warnings as errors
-Tc 將檔案編譯為 .c compile file as .c
-Yc[file] 建立 .PCH 檔案 create .PCH file
-Tp 將檔案編譯為 .cpp compile file as .cpp
-Yd 將除錯資訊放在每個 .OBJ 中 put debug info in every .OBJ
-TC 將所有檔案編譯為 .c compile all files as .c
-TP 將所有檔案編譯為 .cpp compile all files as .cpp
-Yu[file] 使用 .PCH 檔案 use .PCH file
-V 設定版本字串 set version string
-YX[file] 自動的 .PCH 檔案 automatic .PCH
-w 禁用所有警告 disable all warnings
-Zm 最大記憶體分配(預設為 %) max memory alloc (% of default)

連結

-MD 與 MSVCRT.LIB 連結 link with MSVCRT.LIB
-MDd 與 MSVCRTD.LIB 除錯庫連結 link with MSVCRTD.LIB debug lib
-ML 與 LIBC.LIB 連結 link with LIBC.LIB
-MLd 與 LIBCD.LIB 除錯庫連結 link with LIBCD.LIB debug lib
-MT 與 LIBCMT.LIB 連結 link with LIBCMT.LIB
-MTd 與 LIBCMTD.LIB 除錯庫連結 link with LIBCMTD.LIB debug lib
-LD 建立 .DLL Create .DLL
-F 設定堆疊大小 set stack size
-LDd 建立 .DLL 除錯庫 Create .DLL debug libary
-link [連結器選項和庫] [linker options and libraries]