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 -l
libname
カスタムランタイムモード(-custom
オプション参照)でのリンク時に C リンカにオプションとして -l
libname
を渡し、指定した C ライブラリがプログラムにリンクされるようにします。
-ccopt
option
与えられたオプションを C コンパイラやリンカに渡します。
例えば、カスタムランタイムモードでリンクする場合、 -ccopt -L
とすると、リンカはディレクトリ dir
dir
から C のライブラリを探索するようになります。
-config
ocamlc のバージョン番号と構成の概要を表示して終了します。
-custom
カスタムランタイムモードでリンクします。 デフォルトのリンクモードでは、リンカは共有ランタイムシステム ocamlrun で実行するバイトコードを生成します。 カスタムランタイムモードでは、リンカが生成するファイルにはランタイムシステムとプログラムのバイトコードの両方が含まれます。 生成されるファイルは大きくなりますが、 ocamlrun コマンドのインストールされていない環境でも直接実行することができます。 さらにカスタムランタイムモードでは、 18 章「C と Objective Caml のインタフェース」 で述べるように、 Caml コードにユーザが定義した C 関数を静的にリンクすることができます。
Unix | |
---|---|
|
-dlib -l
libname
プログラムの起動時に、 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
は警告指定子を区切り文字なしで並べたものです。
警告指定子は以下のいずれかです。
+num
num
番の警告を有効にします。
-num
num
番の警告を無効にします。
@num
num
番の警告を有効にし、エラーとします。
+num1
..num2
-num1
..num2
@num1
..num2
+letter
letter
に対応する警告を有効にします。
letter
は大文字でも小文字でも構いません。
-letter
letter
に対応する警告を無効にします。
letter
は大文字でも小文字でも構いません。
@letter
letter
に対応する警告を有効にし、エラーとします。
letter
は大文字でも小文字でも構いません。
uppercase-letter
uppercase-letter
に対応する警告を有効にします。
lowercase-letter
lowercase-letter
に対応する警告を無効にします。
現在定義されていない範囲の警告番号は無視されます。 警告番号は以下の通りです。
1
コメント開始文字列かどうかまぎらわしい入力
2
コメント終了文字列かどうかまぎらわしい入力
3
非推奨の構文
4
不十分なパターンマッチ(マッチさせるバリアント型に新たな構成子が追加されても完全であるようなパターンマッチ)
5
部分適用された関数(結果が関数型になる式で、その結果が無視されているもの)
6
関数適用時に省略されたラベル
7
メソッドを定義したクラスでそれをオーバーライドした
8
部分マッチ(パターンマッチでパターンに欠けがある)
9
レコードパターンでフィールドに欠けがある
10
逐次実行式の左辺が unit 型ではない(さらに、それが関数ではない。 5 番の警告も参照)
11
冗長なパターンマッチ(未使用のパターン)
12
冗長なサブパターン
13
インスタンス変数のオーバーライド
14
文字列定数中の不正なバックスラッシュエスケープ
15
private
メソッドが暗黙のうちに公開された
16
省略可能引数を消去できない
17
未宣言の抽象メソッド
18
Non-principal type.
19
Type without principality.
20
未使用の関数引数
21
返らない文。
22
Camlp4 の警告
23
レコード中の必要のない with
節
24
不正なモジュール名。ソースファイルの名前が有効な OCaml のモジュール名ではない。
25
すべての節にガードのついたパターンマッチ。網羅性が検査できません
26
未使用と思しい変数。 let
や as
で束縛されながら未使用の変数で、アンダースコア文字 _
で始まらないもの
27
未使用であるが無害な変数。 let
や as
で束縛されながら未使用の変数で、アンダースコア文字 _
で始まるもの
28
定数構成子に与えられたワイルドカードパターン
29
文字列定数中のエスケープされていない行末文字(可搬性がありません)
30
相互再帰的な型で定義された同名のラベルまたは構成子
各英文字は以下の警告の集合を表します。ここに挙げていない文字は空の集合に対応します。
A
すべての警告
C
1, 2
D
3
E
4
F
5
L
6
M
7
P
8
R
9
S
10
U
11, 12
V
13
X
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
Y
26
Z
27
デフォルトの設定は
です。
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
簡単な使用法を表示して終了します。