C コンパイラ・ドライバのオプション

フリーまたはフリー版のあるWin32用C/C++コンパイラの オプション一覧から、 だいたい同じ機能について適当に抜き出して並べてみた。 もちろん、全てでなく、また、未確認も多い。

己自身はWin環境では基本的にvcを使うが、たまにルーチンチェックに他のコンパイラを使う。 このとき毎度オプションに悩むので覚書してみた、というもの。 が、ちゃんと調べるのは面倒で作りかけで放置中。 (手元にあるコンパイラなので、そのコンパイラの最新バージョンというわけでない。 モノによってはヘルプと実際の挙動に違いがある場合もある)

コンパイラ MS Visual C/C++
(opts)
GNU C/C++(x86)(mingw) Borland C/C++ Digital Mars C/C++  (opts) Open Watcom C/C++  (opts) ←同
使用したヴァージョン (2003(v13.10) or 2005(v14.0)) (mingw 3.4.5)(4.4.1tdm) (5.5.1) (8.49) (1.6) (1.8)
実行名 cl.exe gcc.exe, g++.exe bcc32.exe dmc.exe, sc.exe wcl386.exe owcc
環境変数 INCLUDE
LIB
CL
LIBPATH
INCLUDE
LIB
INCLUDE
(リソースコンパイラが参照)
INCLUDE
LIB
CFLAGS
INCLUDE
LIB
WCL386
←同
@RESPONSE_FILE 指定 無 ※djgppは有 ←同
オプション大小文字区別 ←同
ヘルプ -? --help 簡易
-v --help 詳細
引数指定無 引数指定無 引数指定無 -?
生成ファイル名 -Fe<EXE>
-Fo<OBJ>
-o <FILE> -e<EXE>
-o<OBJ>
-o<FILE> -fe=<FILE>
-fo=<OBJ>
-o <FILE>
オブジェファイル生成 -c -c -c -c -c -c
アセンブラ出力 -FA -S -B -cod (obj2asmが必要) (.objをwdisで逆汗) ←同
プリプロセッサ出力 -P ※file
-E ※stdout
-E (無:別途cpp.exe) (無?) -p{c,l}
コメント有/#line有
-E
-Cコメント有
-P #line無
includeディレクトリ -I<DIR>
-AI<ASM-DIR>
-I <DIR>
-idirafter <DIR>
-isystem <DIR>
-I<DIR> -I<DIR> -i=<DIR> -I <DIR>
libraryディレクトリ -L <DIR> -L<DIR>
暗黙#include指定 -FI<FILE> -include <FILE> -HI<FILE> -fi=<FILE> -include <FILE>
#define指定 -D<NAME>[=str] -D<NAME>[=STR] -D<NAME>[=STR] -D[NAME[=STR]] -d<NAME>[=STR] -D<NAME>[=STR]
#undef指定 -U<NAME> -U<NAME> -U<NAME> -u ※全て -u<NAME> -U<NAME>
厳しめの警告 -W4
-Wall
-Wall -w (-w 警告無効) -wx -Wall
個別の警告(on/off) -wd<NNNN> NNNN番の警告を無効 -w-NNNN NNNN番無効 -w<N> N番無効 -wce=N 有効
-wcd=N 無効
-Wn<N> 有効
-Wno-n<N> 無効
charを符号無しにする -J -funsigned-char
(-fsigned-char 符号付)
-K -J -Ju (-j charを符号付にする)(-fsigned-char 符号付にする)
構造体アライメント -Zp[N] 1,2,4,8,16-malign-double (指定が無ければint)-a[N] 1,2,4,8-a[N] 1,2,4,8-zp[N] 1,2,4,8,16-fpack-struct={1,2,4,8,16}
強制C++ -TP -P -cpp -cc++ -x c++
強制C -TC -cc -x c
RTTIの生成 -GR (-frtti) -fno-rtti -RT -Ar -xr -frtti
(-fno-rtti しない)
C++ EH(例外ハンドラ)を使用 -EHsc (旧-GX 廃止) (-fexceptions) (-x) -Ae -za 無効 -ze 有効 -feh[=s,=t] 適度,サイズ,時間
enumのサイズ関係 -fshort-enums 満たせる最小の整数型に-Bi 可能ならenumをbyteに-ei
int扱い
-em 小整数可
-fno-short-enum int扱い
-fshort-enum 小整数可
最適化:無(デフォルト) -Od -O0 (指定無) ( -o- ) -od -O0
最適化:速度優先 -Ox (-O2 -Ot) -O3 -O2 -Ox -o ( -o+ ) -ox -ot -O3 -Ot
最適化:サイズ優先 -O1 -Os -O1 -Ot -o+space -ox -os -Os
スタック・チェック -Ge -RTCs -fstack-check -N -s (-s チェック無に) (-fno-stack-check チェック無に)
デフォルト的なデバッグ(obj)生成-ZI -g -v -g -d2 -g3
Windowsアプリ -link/subsystem:windows -mwindows -tW -WA -bw -mwindows
Windows DLL -LD
-LDd(デバッグ用)
-mdll -mwin32
(-shared)
-tWD -WD -bd -shared
マルチスレッド
dll ランタイムライブラリのリンク
-MT(d) マルチスレッド静的link
-MD(d) マルチスレッド動的
-ML(d) シングルスレッド
-static dllとのリンクを避ける-br 動的リンク
-bm マルチスレッド版構築
-mthreads マルチスレッド版
-mrtdll ランタイムdll
プリコンパイルヘッダ -Yc -Yu (生成/使用)
-Fpで指定したヘッダを各ソースの先頭でinclude
(デフォルトstdafx.h)
-FIで暗黙include可能.
(引数に.hファイル指定でgch生成)-H ※自動 -HX ※自動
(引数に.hファイル指定で.sym生成)
-fh=<FILE>
-fhq=<FILE>
CPU指定(386,486,Pentium,P6) -G3~-G6 -GB(ブレンド) -b [machineName] -3 (~-6:※余りよくない)-3~-6 -3r~-6r -3s~-6s -mtune={3,4,5,6}86
浮動小数点 -fp:<except[-]|fast|precise|strict>-mhard-float
-msoft-float
等等
-ff 高速実数演算 -f IEEE754
-ff 高速実数演算
-fpc fp-LIB呼出
-fpi87 inlineX87
-fp3 387
-fp5 pen最適化
-fp6 penII最適化
-fpmath={2,3}87
-fptune={5,6}86
-msoft-float
構文チェックのみ -Zs -fsyntax-only
プロトタイプ宣言生成 -Zg (廃予) -v
SJIS対応. (日本語版はデフォルト) (対応版のみ)
--input-charset=cp932 --exec-charset=cp932
(日本語版はデフォルト) -j0 SJIS文字(列)対応 -zk
その他の気になる
コンパイラ固有オプション
-Zc:forScore[-]
forスコープを標準C++仕様に
-ms-bitfields
MS互換 Bit Fields
-n<DIR> 出力ディレクトリ -Bj エラー文を日本語に-vcap
引数リスト中のallocaをVC++互換に
-Zc:schar_t[-]
wchar_tをネイティブ型に
-l <LIB> ライブラリ指定-Aa new[] delete[]可 -zw
MS-Windows向きの生成.
-Wp64 64bit移植性チェック(2005以降は廃予) -Ab bool可 -zku=codepage unicode対応