ocamlc の認識するコマンドラインオプションは以下の通りです。
-pack、 -a、 -c、 -output-obj はいずれかしか指定できません。
-a
コマンドラインに与えられたオブジェクトファイル(.cmo ファイル)から、実行ファイルの代わりに、ライブラリ(.cma ファイル)を作成します。
ライブラリの名前は -o オプションで指定しなければなりません。
コマンドラインで -custom 、 -cclib、 -ccopt オプションのいずれかが指定されていた場合、出力される .cma ライブラリにこれらのオプションが保存されます。
出力されたライブラリをリンクするときに、 -noautolink オプションが指定されていなければ、自動的にこの -custom、 -cclib や -ccopt オプションが追加されます。
-annot
コンパイル時の詳細情報(型、束縛、末尾呼び出し等)を出力します。
に関する情報は src.ml に出力されます。
型エラーが起こった場合には、エラーの起こる前に型検査器の推論した情報をすべて出力します。
src.annot ファイルを使うと src.annotemacs/caml-types.el で提供される emacs コマンド群を使って型情報やその他の注釈を対話的に表示することができます。
-cコンパイルのみ行ない、リンクを行いません。 ソースコードファイルからコンパイル済みファイルを生成しますが、実行ファイルは生成しません。 このオプションはモジュールを分割コンパイルするのに便利です。
-cc ccomp
カスタムランタイムモード(-custom オプション参照)でリンクに使う C リンカや .c ソースファイルをコンパイルする C コンパイラとして ccomp を使用します。
-cclib -llibname
カスタムランタイムモード(-custom オプション参照)でのリンク時に C リンカにオプションとして -llibname を渡し、指定した C ライブラリがプログラムにリンクされるようにします。
-ccopt option
与えられたオプションを C コンパイラやリンカに渡します。
例えば、カスタムランタイムモードでリンクする場合、 -ccopt -L とすると、リンカはディレクトリ dirdir から C のライブラリを探索するようになります。
-configocamlc のバージョン番号と構成の概要を表示して終了します。
-customカスタムランタイムモードでリンクします。 デフォルトのリンクモードでは、リンカは共有ランタイムシステム ocamlrun で実行するバイトコードを生成します。 カスタムランタイムモードでは、リンカが生成するファイルにはランタイムシステムとプログラムのバイトコードの両方が含まれます。 生成されるファイルは大きくなりますが、 ocamlrun コマンドのインストールされていない環境でも直接実行することができます。 さらにカスタムランタイムモードでは、 18 章「C と Objective Caml のインタフェース」 で述べるように、 Caml コードにユーザが定義した C 関数を静的にリンクすることができます。
![]() | Unix |
|---|---|
|
|
-dlib -llibname
プログラムの起動時に、 ocamlrun が C の共有ライブラリ (Windows では libname.so)を動的に読み込むようにします。
libname.dll
-dllpath dir
ディレクトリ dir を実行時の共有 C ライブラリの探索パスに加えます。
リンク時には共有ライブラリは標準の探索パス(-I の指定に対応します)から探索されます。
-dllpath オプションは dir を単純に出力の実行ファイルに格納し、 10.3 節「共有ライブラリの動的読み込み」 で説明するように、 ocamlrun が dir の指定を見つけてそれを利用できるようにします。
-gコンパイルとリンク時にデバッグ情報を追加します。 ocamldebug でプログラムをデバッグする場合( 16 章「デバッガ(ocamldebug)」 参照)や、プログラムが捕捉されない例外により終了した場合にバックトレースを表示する( 10.2 節「オプション」 参照)ためにはこのオプションを指定する必要があります。
-i
実装ファイル(.ml)をコンパイルする際、定義されているすべての名前について、その名前と推論された型または定義を表示します。
コンパイル済みファイル(.cmo ファイルと .cmi ファイル)は生成されません。
コンパイラの推論した型を確認するのに便利です。
また、出力はインターフェイスファイルの構文に従っているので、インターフェイスファイル(.mli ファイル)を書くときの手助けにもなります。
この場合は、単純に標準出力を .mli ファイルにリダイレクトし、 .mli ファイルを編集して非公開の名前の宣言を取り除きます。
-I directory
コンパイル済みインターフェイスファイル(.cmi ファイル)、コンパイル済みオブジェクトコードファイル(.cmo ファイル)、ライブラリ(.cma ファイル)、-cclib -l で指定される C ライブラリの探索パスに与えられたディレクトリを追加します。
デフォルトでは、まずカレントディレクトリから探索し、それから標準ライブラリディレクトリを探索します。
xxx-I で追加されたディレクトリは、カレントディレクトリより後、標準ライブラリディレクトリより前に、コマンドラインに与えた順に探索します。
ディレクトリ名が + で始まっていた場合は、標準ライブラリディレクトリからの相対パスとして扱われます。
例えば、 -I +labltk は標準ライブラリディレクトリのサブディレクトリ labltk を探索パスに追加します。
-impl filename
ファイル filename を実装ファイルとしてコンパイルします。
拡張子は .ml でなくても構いません。
-intf filename
ファイル filename をインターフェイスファイルとしてコンパイルします。
拡張子は .mli でなくても構いません。
-intf-suffix string
(デフォルトの .mli の代わりに) string で終わるファイル名をインタフェースファイルと解釈します。
-labels型中のラベルは無視されず、関数適用でラベルを使うことができ、ラベル付きの引数を任意の順序で与えることができます。 これがデフォルトです。
-linkall
ライブラリに含まれるモジュールをすべて強制的にリンクします。
このフラグが与えられない場合は、参照されていないモジュールはリンクされません。
-a オプションでライブラリを作成する際に -linkall オプションを指定すると、そのライブラリを使用するプログラムをリンクすると、ライブラリ内のモジュールがすべて強制的にリンクされるようになります。
-make-runtime
コマンドラインで与えられた C オブジェクトファイルとライブラリを組み込んだカスンタムランタイムシステムを作成し -o オプションで指定したファイルに出力します。
このカスタムランタイムは ocamlc -use-runtime で生成したバイトコードを実行するのに使うことができます。
詳しくは、 18.1.6 節「Building standalone custom runtime systems」 を参照してください。
runtime-name
-noassert
assert の検査をコンパイルしません。
このとき、特別な形として assert false は常にコンパイルされることに注意してください。
この式には特別な型付け規則が存在するからです。
このフラグは既にコンパイルしたファイルをリンクする場合には何の意味もありません。
-noautolink
.cma ライブラリをリンクするときに、ライブラリが潜在的に持つ -custom、 -cclib、 -ccopt といったオプションを無視します(ライブラリ作成時に指定されていた場合)。
これは、ライブラリに間違った C ライブラリや C オプションの指定が含まれているときに便利な場合があります。
このような場合には、リンクの際コマンドラインで -noautolink を指定し、コマンドラインで正しい C ライブラリやオプションを指定しなおします。
-nolabels型中の省略可能引数以外のラベルを無視します。適用時にラベルを使用することはできず、引数の順序が厳格になります。
-o exec-file
コンパイラの生成する出力ファイルの名前を指定します。
出力のデフォルト名は Unix では a.out、 Windows では camlprog.exe です。
-pack オプションが指定されている場合には、生成されるパックされたオブジェクトファイルの名前を指定します。
-c オプションが指定されている場合には、コマンドライン引数で次に現れたソースファイルに対するオブジェクトファイルの名前を指定します。
-output-obj
バイトコードオブジェクトファイルではなく、 C のオブジェクトファイルを生成するようにします。
これは Caml コードを任意の C プログラムから呼び出せる C ライブラリとしてラップするときに便利です。
18 章「C と Objective Caml のインタフェース」 と 18.7.5 節「Embedding the Caml code in the C code」 を参照してください。
デフォルトでは出力のオブジェクトファイルの名前は camlprog.o になりますが、 -o で設定することもできます。
このオプションは C のソースファイル(拡張子は .c)やコンパイル済みの共有/動的ライブラリ(拡張子 .so、 Windows では .dll)を作成するのにも使うことができます。
-pack
コマンドラインで与えられたオブジェクトファイルを結合してオブジェクトファイル(.cmo)とそのコンパイル済みインターフェイス(.cmi)を生成します。
元のオブジェクトファイルは出力される .cmo ファイルのサブモジュールとなります。
出力の .cmo ファイルの名前は -o オプションで指定しなければなりません。
例えば、
ocamlc -pack -o p.cmo a.cmo b.cmo c.cmo
は、サブモジュールとして A、 B、 C を持つコンパイル済みファイル p.cmo と p.cmi を生成します。
サブモジュールの内容は、それぞれ a.cmo、 b.cmo、 c.cmo の内容に対応します。
これらの要素はプログラムの残りの部分からは P.A、 P.B、 P.C として参照することができます。
-pp command
与えられた command を前処理プログラムとして各々のソースファイルごとに呼び出すようにします。
command の出力は中間ファイルにリダイレクトされ、それがコンパイルされます。
コンパイルエラーが発生しなければ中間ファイルはコンパイル後に削除されます。
-principal
型チェックの際に information path をチェックし、すべての型がもっとも一般的な型として導出されているか確認します。
ラベル付き引数や多相メソッドを使用している場合は、コンパイラの将来のバージョンでアルゴリズムが変更された場合でも、正しく型を推論できることを保証するためにこのフラグを指定する必要があります。
-principal モードで受理されたプログラムはすべて、デフォルトの場合でも等価な型として受理されます。
ただし、この場合でもバイナリのシグネチャは異なりますし、型検査が低速化するかもしれません。
とはいうものの、ソースコードを公開する前に一度このオプションを試してみるのはよいことでしょう。
-rectypes
型検査時に任意の再帰型を認めます。
デフォルトではオブジェクト型を経由する再帰型のみがサポートされます。
このフラグを使ってインタフェースを生成した場合には、それに依存するものにもすべて -rectypes フラグを指定しなければなりません。
-thread
24 章「threads ライブラリ」 で説明する threads
システムスレッドライブラリと組み合わせて、マルチスレッドプログラムをコンパイル・リンクします。
-unsafe
v.(i) 構文や s.[i] 構文を使った配列や文字列へのアクセスの際の境界チェックを無効にします。
このため、 -unsafe オプションを使ってコンパイルしたプログラムは若干高速になりますが、安全ではありません。
プログラムが配列や文字列の境界外にアクセスした場合に何が起こるかはわかりません。
-use-runtime runtime-name
ocamlc -make-runtime で作成しておいたカスタムランタイムシステムで実行するためのバイトコード実行ファイルを生成します。
より詳しくは 18.1.6 節「Building standalone custom runtime systems」 を参照してください。
runtime-name
-vコンパイラのバージョンと標準ライブラリディレクトリの場所を表示して終了します。
-verbose
外部コマンドを実行する前に、そのコマンドを表示します。
特に -custom モードで C コンパイラやリンカの起動を表示します。
C ライブラリプログラムをデバッグする際に便利です。
-vnum または -version
コンパイラのバージョン番号を短かい形式(例えば 3.11.0)で表示して終了します。
-vmthread
24 章「threads ライブラリ」 で説明する threads
VM レベルスレッドライブラリと組み合わせてマルチスレッドプログラムをコンパイル・リンクします。
-w warning-list
warning-list 引数で指定された警告を別個に有効にしたり無効にしたり、エラーとして報告されるようにしたりします。
各々の警告を有効にしたり無効にしたり、エラーとすることもしないこともできます。
警告を無効にすると表示されなくなり(エラーとされていても)コンパイルにまったく寄与しなくなります。
有効にすると、ソースコードに該当する部分があると通常通り警告が表示されます。
エラーになるものと指定されていた場合には、警告を表示したあとにコンパイラが停止します。
warning-list は警告指定子を区切り文字なしで並べたものです。
警告指定子は以下のいずれかです。
+numnum 番の警告を有効にします。
-numnum 番の警告を無効にします。
@numnum 番の警告を有効にし、エラーとします。
+num1..num2-num1..num2@num1..num2+letterletter に対応する警告を有効にします。
letter は大文字でも小文字でも構いません。
-letterletter に対応する警告を無効にします。
letter は大文字でも小文字でも構いません。
@letterletter に対応する警告を有効にし、エラーとします。
letter は大文字でも小文字でも構いません。
uppercase-letteruppercase-letter に対応する警告を有効にします。
lowercase-letterlowercase-letter に対応する警告を無効にします。
現在定義されていない範囲の警告番号は無視されます。 警告番号は以下の通りです。
1コメント開始文字列かどうかまぎらわしい入力
2コメント終了文字列かどうかまぎらわしい入力
3非推奨の構文
4不十分なパターンマッチ(マッチさせるバリアント型に新たな構成子が追加されても完全であるようなパターンマッチ)
5部分適用された関数(結果が関数型になる式で、その結果が無視されているもの)
6関数適用時に省略されたラベル
7メソッドを定義したクラスでそれをオーバーライドした
8部分マッチ(パターンマッチでパターンに欠けがある)
9レコードパターンでフィールドに欠けがある
10逐次実行式の左辺が unit 型ではない(さらに、それが関数ではない。 5 番の警告も参照)
11冗長なパターンマッチ(未使用のパターン)
12冗長なサブパターン
13インスタンス変数のオーバーライド
14文字列定数中の不正なバックスラッシュエスケープ
15
private メソッドが暗黙のうちに公開された
16省略可能引数を消去できない
17未宣言の抽象メソッド
18Non-principal type.
19Type without principality.
20未使用の関数引数
21返らない文。
22Camlp4 の警告
23
レコード中の必要のない with 節
24不正なモジュール名。ソースファイルの名前が有効な OCaml のモジュール名ではない。
25すべての節にガードのついたパターンマッチ。網羅性が検査できません
26
未使用と思しい変数。 let や as で束縛されながら未使用の変数で、アンダースコア文字 _ で始まらないもの
27
未使用であるが無害な変数。 let や as で束縛されながら未使用の変数で、アンダースコア文字 _ で始まるもの
28定数構成子に与えられたワイルドカードパターン
29文字列定数中のエスケープされていない行末文字(可搬性がありません)
30相互再帰的な型で定義された同名のラベルまたは構成子
各英文字は以下の警告の集合を表します。ここに挙げていない文字は空の集合に対応します。
Aすべての警告
C1, 2
D3
E4
F5
L6
M7
P8
R9
S10
U11, 12
V13
X14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
Y26
Z27
デフォルトの設定は です。
5 番と 10 番と警告は型検査器の内部に依存し、常に警告されるわけではないことに注意してください。
-w +a-4-6-7-9-27..29
-warn-error warning-list
warning-list 引数に指定された警告をエラーと見做します。
これらの警告のいずれがを表示するとコンパイラは停止します。
warning-list の意味は -w オプションと同じです。
+ (または大文字)は対応する警告をエラーにし、 - (または小文字)はそれらを警告に戻します。
@ は対応する警告を有効にし、エラーにします。
注意: 製品コードでは -warn-error の引数は文字列形式にすることを推奨します。
これは、 OCaml の将来のバージョンで新たな警告が追加された場合に、うまく動作しなくなる可能性があるからです。
デフォルトの設定は で、警告はすべてエラーとして扱われません。
-warn-error -a
-where標準ライブラリの場所を表示して終了します。
- file
file をファイル名として扱います。
ファイル名は - で始まっていても構いません。
-help または --help簡単な使用法を表示して終了します。