8.2 オプション

ocamlc に認識されるコマンドラインオプションは以下の通りです。

-a

コマンドラインに与えられたオブジェクトファイル (.cmo) をとり、ライブラリ (.cma) を作成します。 実行ファイルは生成されません。ライブラリの名前は -o オプションで指定できます。 コマンドラインに -custom-cclib-ccopt オプションが渡されたら、これらのオプションは出力される .cma ライブラリに保存され、このライブラリをリンクするときに自動的に -custom-cclib や -ccopt が追加されます (ただしリンク時に -noautolink が指定されない場合)。

-c

コンパイルのみ行います。 リンクを行いません。 ソースコードファイルをコンパイル済みファイルに変換しますが、実行ファイルは生成されません。 このオプションはモジュールの分割コンパイル時に使用できます。

-cc ccomp

ocamlc -custom で呼ばれる C リンカや .c ソースファイルをコンパイルする C コンパイラとして ccomp を使用します。

-cclib -llibname

カスタムランタイムモードでのリンク時、C リンカにオプションとして -llibname を渡し、指定された C ライブラリをプログラムにリンクします。

-ccopt option

カスタムランタイムモードでのリンク時、C コンパイラやリンカに与えられたオプションを渡します。 例えば、-ccopt -Ldir なら C リンカは C ライブラリを探す際ディレクトリ dir を見るようになります。

-custom
-dlib -llibname

ランタイムシステム ocamlrun がプログラムスタート時に動的ロードする C 共有ライブラリ dlllibname.so (Windows では dlllibname.dll) を指定します。

-dllpath dir

ランタイムシステムが共有 C ライブラリを検索するディレクトリ dir を追加します。 リンク時は共有ライブラリを標準検索パス (-I オプションと関連する) へ検索しにいきます。-dllpath オプションで dir が単純に生成される実行ファイルへ埋め込まで、ocamlrun がそれを見つけ探しに行きます。詳細は 10.3 章を見てください。

-dtypes

詳細な型の情報を表示します。x.ml というファイルの情報は x.annot というファイルに出力されます。 型エラーが起こった場合には、エラーが起きる前までに型チェッカによって推論されたすべての情報がダンプされます。 x.annot ファイルは emacs/caml-types.el で定義されるコマンドで型をインタラクティブに表示するのに使うことができます。

-g

コンパイルとリンク時にデバッグ情報を追加します。 ocamldebug でプログラムをデバッグする場合はこのオプションが必要です。 詳細は 16 章を見てください。 また、プログラムが例外により終了した場合のスタックトレースを生成するためにも必要です。詳細は10.2節を見てください。

-i

実装ファイル (.ml) をコンパイルする際、定義されている名前をすべて型と定義付きで表示します。 コンパイル済みファイル(.cmo.cmi)は生成されません。 コンパイラがどのように型推論をしているかチェックするときに使用できます。 また出力はインターフェイスの文法に従っているので、インターフェイスファイル (.mli) を書くときの手助けになります。 標準出力を .mli ファイルにリダイレクトして、非公開な名前の宣言を消していくだけです。

-I directory

コンパイル済みインターフェイスファイル (.cmi) 、コンパイル済みオブジェクトコードファイル (.cmo) 、ライブラリ (.cma) 、-cclib -lxxx で指定される C ライブラリを検索する際検索しに行くディレクトリのリストに与えられたディレクトリを追加します。 デフォルトでは、まずカレントディレクトリが、それから標準ライブラリディレクトリが検索されます。-I で追加されたディレクトリは、カレントディレクトリより後に、標準ライブラリディレクトリより前に、コマンドラインに与えられた順に検索されます。

+ で始まるディレクトリ名は、標準ライブラリディレクトリからの相対パスとみなされます。例えば -I +labltk は標準ライブラリのサブディレクトリ labltk を検索パスに追加します。

-impl filename

ファイル filename を実装ファイルとしてコンパイルします。 拡張子が .ml でなくても構いません。

-intf filename

ファイル filename をインターフェイスファイルとしてコンパイルします。 拡張子が .mli でなくても構いません。

linkall

ライブラリに含まれるモジュールをすべて強制的にリンクします。 このフラグが与えられなかったら、参照されないモジュールはリンクされません。 ライブラリを作成するときに (-a flag) これを与えると、そのライブラリを使用するプログラムをリンクする際、ライブラリ内のモジュールはすべて強制的にリンクされます。

-make-runtime

カスタムランタイムシステムを作成します。このランタイムシステムはコマンドラインで与えられた C オブジェクトやライブラリと合体しています。 ocamlc -use-runtime runtime-name オプションで生成されたバイトコードがこのカスタムランタイムシステムを使用するようになります。 詳しくはセクション 18.1.6 を見てください。

-noassert

assertion のチェックをやめます。 assertion はコンパイルされません。 すでにコンパイルされたファイルをリンクする場合には、このフラグは何の意味も持ちません。

-noautolink

.cma ファイルをリンクするとき、ライブラリが潜在的に持つ -custom-cclib-ccopt といったオプション (ライブラリを作成するときに指定されたもの) を無視します。 ライブラリが間違った C ライブラリや C オプションの指定をしているときに使用できます。 この場合、リンクの際コマンドラインで -noautolink を指定して、正しい C ライブラリやオプションを指定し直してください。

-nolabels

型の中でオプションではないラベルを無視します。適用にラベルは使用できません。パラメータの順序が絶対になります。

-o exec-file

リンカによって出力されるファイルの名前を指定します。 デフォルトの出力ファイル名は Unix 環境で a.out、 Windows 環境で camlprog.exe です。 -a が指定されている場合は生成されるライブラリ名の指定になります。 もし -pack が指定されている場合は生成されるパックオブジェクトファイル名の指定になります。 -output-obj が指定されている場合は生成されるファイル名の指定になります。

-output-obj

リンカは実行ファイルではなく C オブジェクトファイルを生成します。 C のプログラムから呼べるように、Caml のコードを C のライブラリとしてラップするのに使います。 18 章のセクション 18.7.5 を見てください。 出力されるオブジェクトファイルの名前はデフォルトで camlprog.o です。 -o オプションで変更可能です。

-pack

コマンドラインで与えられたオブジェクトファイルをまとめて、オブジェクトファイル (.cmo) とそのコンパイル済みインターフェイス (.cmi) を生成します。 元のオブジェクトは出力された .cmo ファイルのサブモジュールとなります。 出力される .cmo ファイルの名前は -o オプションで必ず与えてください。

ocamlc -pack -o p.cmo a.cmo b.cmo c.cmo

例として、上記のコマンドは p.cmop.cmi を生成します。それらは 3 つのサブモジュール ABC を持ち、それぞれオブジェクトファイル a.cmob.cmoc.cmo の内容に対応します。他のプログラムからは、P.AP.BP.C などとしてこれらの内容を参照することができます。

-pp command

コンパイラは与えられたコマンド command をプリプロセッサとしてすべてのソースファイルに適用します。 command の出力は一時ファイルにリダイレクトされてからコンパイルされます。 コンパイルでエラーが発生しなかったら一時ファイルは削除されます。 ソースファイルのベース名と拡張子 .ppi (インターフェイス .mli の場合) もしくは .ppo (実装 .ml の場合) から構成される名前が一時ファイルの名前になります。

-principal

型チェックの際 information path をチェックします。 すべての型が principal way で導出されているか確認します。 ラベル付き引数や多相メソッドを使用しているときは、このフラグをつけてコンパイルの通らないコードは、将来コンパイラのバージョンアップで型チェックの内部アルゴリズムが変更された場合正しく型推論できなくなるかもしれません。 -principal モードでコンパイルの通るプログラムは必ずデフォルトモード (equivalent type) でもコンパイルが通ります (ただしバイナリの signature は異なります) 。 このオプションを付けると型チェックが遅くなるかもしれません。ソースコードを公開する前に一度これでコンパイルしてみるといいです。

-rectypes

型チェックの際、任意の再帰的な型を許します。 デフォルトでは、オブジェクト型を経由する再帰による再帰的な型しかサポートされません。 一度このフラグを使ってインターフェースファイルを生成したら、それが依存するすべてのものに対して使わなくてはいけません。

-thread

24 章で解説される threads ライブラリと組み合わせてマルチスレッドプログラムをコンパイル、リンクします。

-unsafe

配列や文字列アクセスのバウンダリチェックをオフにします (v.(i)s.[i]) 。 -unsafe でコンパイルされたプログラムはいくらか速くなりますが安全ではありません。 プログラムが配列や文字列のバウンド外をアクセスした場合何が起こるかわかりません。

-use-runtime runtime-name

あらかじめ ocamlc -make-runtime runtime-name で生成されているカスタムランタイムシステム runtime-name を使用して実行するバイトコード実行ファイルを生成します。 詳しくはセクション 18.1.6 を見てください。

-v

コンパイラのバージョンと標準ライブラリディレクトリを表示して終了します。

-verbose

外部コマンドを実行する前に、そのコマンドを表示します。 特に -custom モードで C コンパイラやリンカの起動を表示します。 C ライブラリプログラムをデバッグするのに使用できます。

-version

コンパイラのバージョンを短い表記 (3.06 みたいに) 表示して終了します。

-vmthread

24 章で解説される VM レベル threads ライブラリと組み合わせてマルチスレッドプログラムをコンパイル、リンクします。

-w warning-list

警告を有効/無効にします。引数 warning-list は文字列で、各文字は以下の意味を持ちます。

A/aすべての警告を有効/無効にする
C/cコメントかどうか疑わしいものに対する警告を有効/無効にする
D/d推奨されていない (deprecated) 機能に対する警告を有効/無効にする
E/e不十分なパターンマッチ(バリアントにコンストラクタが追加されても、成立するmatch式)に対する警告を有効/無効にする
F/f関数の部分適用に対する警告を有効/無効にする (つまり f x; expr のようなコードで、適用 f x が関数型を持つようなとき).
L/l適用でラベルが省略されていることに対する警告を有効/無効にする
M/mメソッドのオーバーライドに対する警告を有効/無効にする
P/p部分マッチ (パターンマッチでどれにもマッチしない場合があるもの) に対する警告を有効/無効にする
S/senable/disable warnings for statements that do not have type unit (e.g. expr1; expr2 when expr1 does not have type unit), and that are not functions (covered by warning F).
U/u使用されない (冗長な) マッチケースに対するに対する警告を有効/無効にする
V/v隠れたインスタンス変数に対する警告を有効/無効にする
Y/yenable/disable warnings for unused variables bound with the let or as keywords and that don't start with an underscore.
Z/zenable/disable warnings for all other unused variables that don't start with an underscore.
X/xenable/disable warnings that don't fit in the above categories.

The default setting is -w Aelz (all warnings enabled except fragile matchings, omitted labels, non-suspicious unused variables). Warnings F and

S rely on the type system, thus they are not triggered when the type of the statement is unknown.

-warn-error warning-list

Turn the warnings indicated in the argument warning-list into errors. The compiler will stop with an error when one of these warnings is emitted. The warning-list is a string of one or several characters, with the same meaning as for the -w option: an uppercase character turns the corresponding warning into an error, a lowercase character leaves it as a warning. The default setting is -warn-error a (none of the warnings is treated as an error).

-where

Print the location of the standard library, then exit.