8.2 オプション

ocamlc の認識するコマンドラインオプションは以下の通りです。 -pack-a-c-output-obj はいずれかしか指定できません。

-a

コマンドラインに与えられたオブジェクトファイル(.cmo ファイル)から、実行ファイルの代わりに、ライブラリ(.cma ファイル)を作成します。 ライブラリの名前は -o オプションで指定しなければなりません。

コマンドラインで -custom-cclib-ccopt オプションのいずれかが指定されていた場合、出力される .cma ライブラリにこれらのオプションが保存されます。 出力されたライブラリをリンクするときに、 -noautolink オプションが指定されていなければ、自動的にこの -custom-cclib-ccopt オプションが追加されます。

-annot

コンパイル時の詳細情報(型、束縛、末尾呼び出し等)を出力します。 src.ml に関する情報は src.annot に出力されます。 型エラーが起こった場合には、エラーの起こる前に型検査器の推論した情報をすべて出力します。 src.annot ファイルを使うと emacs/caml-types.el で提供される emacs コマンド群を使って型情報やその他の注釈を対話的に表示することができます。

-c

コンパイルのみ行ない、リンクを行いません。 ソースコードファイルからコンパイル済みファイルを生成しますが、実行ファイルは生成しません。 このオプションはモジュールを分割コンパイルするのに便利です。

-cc ccomp

カスタムランタイムモード(-custom オプション参照)でリンクに使う C リンカや .c ソースファイルをコンパイルする C コンパイラとして ccomp を使用します。

-cclib -llibname

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

-ccopt option

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

-config

ocamlc のバージョン番号と構成の概要を表示して終了します。

-custom

カスタムランタイムモードでリンクします。 デフォルトのリンクモードでは、リンカは共有ランタイムシステム ocamlrun で実行するバイトコードを生成します。 カスタムランタイムモードでは、リンカが生成するファイルにはランタイムシステムとプログラムのバイトコードの両方が含まれます。 生成されるファイルは大きくなりますが、 ocamlrun コマンドのインストールされていない環境でも直接実行することができます。 さらにカスタムランタイムモードでは、 18 章「C と Objective Caml のインタフェース で述べるように、 Caml コードにユーザが定義した C 関数を静的にリンクすることができます。

[注記]Unix

ocamlc -custom で生成した実行ファイルに対して strip コマンドを使用しないで下さい。実行ファイルのバイトコード部分が削除される可能性があります。

-dlib -llibname

プログラムの起動時に、 ocamlrun が C の共有ライブラリ libname.so (Windows では libname.dll)を動的に読み込むようにします。

-dllpath dir

ディレクトリ dir を実行時の共有 C ライブラリの探索パスに加えます。 リンク時には共有ライブラリは標準の探索パス(-I の指定に対応します)から探索されます。 -dllpath オプションは dir を単純に出力の実行ファイルに格納し、 10.3 節「共有ライブラリの動的読み込み」 で説明するように、 ocamlrundir の指定を見つけてそれを利用できるようにします。

-g

コンパイルとリンク時にデバッグ情報を追加します。 ocamldebug でプログラムをデバッグする場合( 16 章「デバッガ(ocamldebug 参照)や、プログラムが捕捉されない例外により終了した場合にバックトレースを表示する( 10.2 節「オプション」 参照)ためにはこのオプションを指定する必要があります。

-i

実装ファイル(.ml)をコンパイルする際、定義されているすべての名前について、その名前と推論された型または定義を表示します。 コンパイル済みファイル(.cmo ファイルと .cmi ファイル)は生成されません。 コンパイラの推論した型を確認するのに便利です。 また、出力はインターフェイスファイルの構文に従っているので、インターフェイスファイル(.mli ファイル)を書くときの手助けにもなります。 この場合は、単純に標準出力を .mli ファイルにリダイレクトし、 .mli ファイルを編集して非公開の名前の宣言を取り除きます。

-I directory

コンパイル済みインターフェイスファイル(.cmi ファイル)、コンパイル済みオブジェクトコードファイル(.cmo ファイル)、ライブラリ(.cma ファイル)、-cclib -lxxx で指定される C ライブラリの探索パスに与えられたディレクトリを追加します。 デフォルトでは、まずカレントディレクトリから探索し、それから標準ライブラリディレクトリを探索します。 -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 runtime-name で生成したバイトコードを実行するのに使うことができます。 詳しくは、 18.1.6 節「Building standalone custom runtime systems」 を参照してください。

-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

は、サブモジュールとして ABC を持つコンパイル済みファイル p.cmop.cmi を生成します。 サブモジュールの内容は、それぞれ a.cmob.cmoc.cmo の内容に対応します。 これらの要素はプログラムの残りの部分からは P.AP.BP.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 runtime-name で作成しておいたカスタムランタイムシステムで実行するためのバイトコード実行ファイルを生成します。 より詳しくは 18.1.6 節「Building standalone custom runtime systems」 を参照してください。

-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

未使用と思しい変数。 letas で束縛されながら未使用の変数で、アンダースコア文字 _ で始まらないもの

27

未使用であるが無害な変数。 letas で束縛されながら未使用の変数で、アンダースコア文字 _ で始まるもの

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

デフォルトの設定は -w +a-4-6-7-9-27..29 です。 5 番と 10 番と警告は型検査器の内部に依存し、常に警告されるわけではないことに注意してください。

-warn-error warning-list

warning-list 引数に指定された警告をエラーと見做します。 これらの警告のいずれがを表示するとコンパイラは停止します。 warning-list の意味は -w オプションと同じです。 + (または大文字)は対応する警告をエラーにし、 - (または小文字)はそれらを警告に戻します。 @ は対応する警告を有効にし、エラーにします。

注意: 製品コードでは -warn-error の引数は文字列形式にすることを推奨します。 これは、 OCaml の将来のバージョンで新たな警告が追加された場合に、うまく動作しなくなる可能性があるからです。

デフォルトの設定は -warn-error -a で、警告はすべてエラーとして扱われません。

-where

標準ライブラリの場所を表示して終了します。

- file

file をファイル名として扱います。 ファイル名は - で始まっていても構いません。

-help または --help

簡単な使用法を表示して終了します。