A. OMake コマンドラインオプション

omake [-j <count>] [-k] [-p] [-P] [-n] [-s] [-S] [-w] [-t] [-u] [-U] [-R] [--verbose] [--project] [--depend] [--progress] [--print-status] [--print-exit] [--print-dependencies] [--show-dependencies <target>] [--all-dependencies] [--verbose-dependencies] [--force-dotomake] [--dotomake <dir>] [--flush-includes] [--configure] [--save-interval <seconds>] [--install] [--install-all] [--install-force] [--version] [--absname] [--output-normal] [--output-postpone] [--output-only-errors] [--output-at-end] filename... [var-definition...]

A.1 一般的な使い方

ブーリアンオプション(例えば -s , --progress など…)は意味を逆転させる接頭辞 --no を付与することができます。例えば、オプション --progress は『プログレスバーを表示する』ことを示していますが、オプション --no--progress は『プログレスバーを表示しない』ことを示しています。

複数の重複するオプションが指定されていた場合、最後のオプションがOMakeでのふるまいを決定します。以下のコマンドラインでは、最後の --no-S が前の -S オプションを打ち消します。

% omake -S --progress --no-S

A.2 出力のコントロール

A.2.1 -s

-s

コマンドが実行された場合でも、決してコマンドの内容を表示しません(“silent”)。

A.2.2 -S

-S

コマンドが出力を生成したり、失敗したりするまでは、コマンドの内容を表示しません。このオプションはデフォルトで有効です。

A.2.3 -w

-w

コマンドが実行される時点でのディレクトリの情報を make フォーマットで表示します。これはエラー場所を特定するため、makeスタイルのディレクトリの情報を切望しているエディターにとって、とても有用なオプションです。

A.2.4 -progress

--progress

進捗状況(プログレスバー)を表示します。このオプションは、OMakeの出力先( stdout )がターミナルとなっている場合はデフォルトで有効となり、OMakeの出力先がリダイレクトされている場合はデフォルトで無効となります(Windowsを除く)。

A.2.5 -print-status

--print-status

ステータスライン( +- ライン)を表示します。

A.2.6 -print-exit

--print-exit

コマンドが成功した場合には終了コードを表示します。

A.2.7 -verbose

--verbose

OMakeの出力を詳細に表示します。このオプションは --no-S --print-status --print-exit VERBOSE=true と等価です。

A.2.8 -output-normal

--output-normal

ルールコマンドを実行した時点で、コマンドの出力をOMakeの出力へと即座に受け渡します。これは --output-postpone--output-only-errors が有効になっていない限りデフォルトで有効です。

A.2.9 -output-postpone

--output-postpone

ルールが完了した際に、出力を一つのブロックとして一気に表示します。これは複数のサブプロセスの出力をまとめてくれる(garbled) -j オプション( A.3.12 -j を参照)と一緒に使うと有用です。コマンドの出力は一つにまとめられて表示します。

ノート

--output-postpone を有効にした際、デフォルトで --output-normal オプションが無効になります。この仕様は、インタラクティブな入力を要請するコマンドを使いたいような場合に問題となるでしょう。 --output-postpone が有効になって、さらに --output-normal が無効になっているような場合、このようなコマンドのプロンプトを表示することはなくなるので、ビルドがなぜ『固まって』いるのか理解することは殆ど困難となります。このような状況に直面した際、あなたは --process フラグ( A.2.4 -progress を参照)を用いて、ビルドが実行されているのかどうか確認すべきです。

A.2.10 -output-only-errors

--output-only-errors

--output-postpone と似ていますが、このオプションは成功したコマンドの出力を表示しません。つまりユーザが望んでいない出力を減らすことができるので、あなたは任意のエラーが出た箇所のみに集中できます。

A.2.11 -output-at-end

--output-at-end

任意のルールやコマンドが失敗した場合、失敗したコマンドの出力をOMakeのビルドが終了した際に表示します。これは -k , -p , -P オプションのうち一つでも有効としている場合に、特に有用となります。

このオプションはデフォルトで無効となっています。しかしながら、 -k オプションが有効となっているような場合ー明示的、あるいは -p/-P オプションを経由した場合ー --output-at-end オプションはデフォルトで有効となります。

A.2.12 -o

-o [01jwWpPxXsS]

上記の出力オプションを簡単に指定するために、 -o オプションが出力オプションの代替手段として提供されています。 -o オプションは文字のシーケンスで構成された引数が必要となります。文字は左から右へ読み込まれ、各々の文字は出力オプションの集合を指定しています。一般的に、大文字はオプションを有効にして、小文字はオプションを無効化します。

  • 0

    -s --output-only-errors --no-progress と等価です。

    このオプションは omake の出力ができるだけサイレントとなるように指定します。任意のエラーがビルド中に生じた場合、出力はビルドが終了するまで延期されます。成功したコマンドの出力は表示されません。

  • 1

    -S --progress --output-only-errors と等価です。

    このオプションは上の『サイレント』なバージョンよりも、もう少し寛容な形になっています。成功したコマンドの出力は表示しません。失敗したコマンドの出力はコマンドが完了した後で、即座に表示します。失敗したコマンドの出力は2回表示します。まず1回目はコマンドが完了した際に表示し、2回目はビルドが完了した際に表示します。また、プログレスバーも表示するので、あなたはビルドが実行されているのかどうか確認することができます。もしプログレスバーを表示したくないのであれば、 p オプションを含めてください(例: omake -o 1p )。

  • 2

    --progress --output-postpone と等価です。

    このオプションはさらに寛容な形となっており、成功したコマンドの出力も表示します。これは -j オプションを用いて出力を重ね合わせたくない(deinterleaving)ような場合にしばしば有用となります。

  • W

    -w と等価です。

  • w

    --no-w と等価です。

  • P

    -progress と等価です。

  • p

    --no--progress と等価です。

  • X

    --print-exit と等価です。

  • x

    --no-print-exit と等価です。

  • S

    -S と等価です。

  • s

    --no-S と等価です。

A.3 ビルドオプション

A.3.1 -k

-k

ビルドコマンドが失敗したとしても中断せず、可能な限りプロジェクトのビルドを続けます。このオプションは -p あるいは -P オプションを指定した場合、暗黙的に有効となります。さらに、このオプションは暗黙的に --output-at-end オプションを有効にします。

A.3.2 -n

-n

このオプションによって、プロジェクトがビルドされる場合にどのような手順が踏まれるのか、実際に確認することができます。

A.3.3 -p

-p

ファイルシステムの変化を監視し、ビルドが成功するまで実行し続けます。このオプションを指定した場合、 omake はソースファイルが変更された際にはいつでもビルドを開始します。また、暗黙的に -k オプションを有効にします。

A.3.4 -P

-P

ファイルシステムの変更点を永久に監視します。このオプションを指定した場合、 omake はソースファイルが変更された際にはいつでもビルドを開始します。また、暗黙的に -k オプションを有効にします。

A.3.5 -R

-R

カレントディレクトリを無視し、ルートディレクトリからプロジェクトをビルドします。 omake をプロジェクトのサブディレクトリから実行し、さらに明示的なターゲットをコマンドライン上から与えていないような場合、OMakeは通常カレントディレクトリとそのサブディレクトリ内にあるファイルのみをビルドします(正確には、すべてのカレントディレクトリ内の .DEFAULT ターゲットをビルドします)。 -R オプションを指定した場合、まるで omake がプロジェクトのルート上から実行しているかのようにビルドを行います。

言い換えると、 -R オプションを用いることで、コマンドライン上から指定したすべての関連するターゲットを、(カレントディレクトリに関連付ける代わりに)プロジェクトのルートに関連付けます。なんのターゲットもコマンドライン上に指定していない場合には、プロジェクト上のすべての .DEFAULT ターゲットが(カレントディレクトリに関係なく)ビルドされます。

A.3.6 -t

-t

強制的に omake のデータベースを更新します。

A.3.7 -U

-U

キャッシュされたビルド情報を用いません。このオプションを指定した場合、強制的にプロジェクト全体をリビルドします。

A.3.8 -depend

--depend

キャッシュされた依存関係の情報を用いません。このオプションを指定した場合、強制的にファイルの依存関係を再スキャンします。

A.3.9 -configure

--configure

OMakeファイルに含まれている static. セクションを、キャッシュされた結果を用いる代わりに再実行します。

A.3.10 -force-dotomake

--force-dotomake

常に $HOME/.omake.omc キャッシュファイルを用います。

A.3.11 -dotomake

--dotomake <dir>

$HOME/.omake を用いる代わりに、指定したディレクトリに置かれた .omc キャッシュファイルを用います。

A.3.12 -j

-j <count>

平行して複数のビルドコマンドを実行します。 count では同時に実行するコマンドの限界数を指定します。加えて、 server=count の形でリモートサーバのコマンドを実行することもできます。例えば、オプション -j 2:small.host.org=1:large.host.org=4 は2つのジョブをローカルで実行し、さらに1つをサーバ small.host.org 上、4つを large.host.org 上で実行します。それぞれのリモートサーバはプロジェクト上の同一の場所で実行しなければなりません。

リモートサーバでの実行は現在実験的な機能として搭載しています。NFSのようなリモートファイルシステムでは、十分なファイルの整合性を保つことはできません。

A.3.13 -print-dependencies

--print-dependencies

コマンドライン上でのターゲットの、依存関係に関する情報を表示します。

A.3.14 -show-dependencies

--show-dependencies <target>

target をビルドする場合、依存関係に関する情報を表示します。

A.3.15 -all-dependencies

--all-dependencies

オプション --print-dependencies あるいは --show-dependencies が指定されている場合、動的な依存関係も表示します。これは、すべての依存関係を再帰的に表示することを表しています。オプション --print-dependencies , --show-dependencies のどちらも指定していない場合、このオプションはなんの影響も与えません。

A.3.16 -verbose-dependencies

--verbose-dependencies

オプション --print-dependencies あるいは --show-dependencies が指定されている場合、各々の依存関係のリストを表示します。出力はとても冗長となり、ファイルへのリダイレクトも考慮されるようになります。オプション --print-dependencies , --show-dependencies のどちらも指定していない場合、このオプションはなんの影響も与えません。

A.3.17 -install

--install

デフォルトのファイル OMakefileOMakeroot をカレントディレクトリにインストールします。典型的な使い方としては、カレントディレクトリ内でOMakeのプロジェクトを開始しようとする際に、このオプションを用います。

A.3.18 -install-all

--install-all

OMakefileOMakeroot をインストールし、さらにデフォルトの OMakefile をカレントディレクトリ内のサブディレクトリにインストールします。その際に、サブディレクトリのリストをフィルタリングするため cvs(1) のルールが用いられます。例えば、 OMakefileCVS , RCCS などのディレクトリ内にはコピーされません。

A.3.19 -install-force

--install-force

通常、 omake は既存の OMakefile を上書きする前に警告を行います。このオプションが与えられている場合、すべてのファイルは強制的に警告を発することなく上書きされます。

A.3.20 -absname

--absname

ファイル名は絶対パスとして展開されるようになります。

ノート

これは実験的なオプションで、廃止される恐れがあります。

A.3.21 変数の定義

name=[value]

omake の変数は name=value の形で、コマンドライン上から指定することもできます。例えば、 CFLAGS 変数はコマンドライン上から、引数に CFLAGS="-Wall -g" を指定することで定義することもできます。

A.4 さらなるオプション

これらのオプションに加えて、 omake ではコマンドライン上で利用できる、数多くのデバッグフラグをサポートしています。これらのフラグの概要について知りたい方は、 omake --help を実行してください。

A.5 環境変数

A.5.1 OMAKEFLAGS

OMAKEFLAGS 変数が定義されている場合、 OMAKEFLAGS で指定したオプションの集合が、コマンドライン上から指定したものと同様に扱われます。

A.5.2 OMAKELIB

OMAKELIB が定義されている場合、 OMAKELIB の環境変数はOMakeでの標準ライブラリの場所を表しています。これは Pervasives.om などを含んだディレクトリとなっています。Unixシステム上では、これは大まかに /usr/lib/omake/usr/local/lib/omake へ関連付けられ、Win32システム上では c:\Program Files\OMake\lib へ関連付けられます。

この環境変数が定義されていない場合、 omake は設定されたデフォルトのパスを用います。通常はこの環境変数を未定義のままにしておいて構いません。

A.6 関数

A.6.1 OMakeFlags

OMakeFlags 関数はオプションの集合を OMakefile の内部で修正するために用いられます。このオプションはコマンドライン上で指定するのと同様にして指定する必要があります。例えば、ある特定のプロジェクト内で出力をサイレント、かつプログレスバーを表示したい場合、あなたは OMakefile 上に以下の行を追加します。

OMakeFlags(-S --progress)

この関数によって指定したオプションは、まるで変数のようにスコープ化されます。例えば、OMakeでの出力を(プロジェクト全体で有効にする代わりに)一つのルール上でサイレントにしたい場合は、オプションを適用させる範囲をそのままスコープ化します。

section
    # fooが生成される際に、コマンドラインの出力を表示しません
    OMakeFlags(-S)

    foo: fee
       echo "This is a generated file" > foo
       cat fee >> foo
       chmod 555 foo

A.7 オプションの処理過程

omake が実行された際、オプションは以下の順に処理されます。

  1. OMAKEFLAGS 環境変数によって指定したすべてのオプションが、プロジェクト全体に作用します。
  2. コマンドラインによって指定したすべてのオプションが、プロジェクト全体に作用します。
  3. OMakeFlags 関数によって呼び出された任意のオプションが、プロジェクトの一部分に作用します。

A.8 .omakerc

$(HOME)/.omakerc が存在する場合、任意の OMakefiles が読み込まれる前にまず $(HOME)/.omakerc が読み込まれます。このファイルは、ユーザが自由にOMakeをカスタマイズする用途として頻繁に用いられます。例えば、 OMAKEFLAGS 環境変数を定義する代わりに、以下の行を .omakerc に加えることもできます。

$(HOME)/.omakerc:
    # プライベートなオプションを記述
    OMakeFlags(-S --progress)