次: , 前: History, 上: Preliminaries


1.3 m4の起動(オプション一覧)

m4コマンドを起動するときの形式は次のようになります。

     m4 [option...] [macro-definitions...] [input-file...]

オプションは、短いオプション名を使うときは`-'で始め、 長いオプション名を使うときは`--'で始めます。 長いオプション名は、 そのオプションだと明確に特定できる先頭部分を書くだけで十分です。 m4は次のオプションを受けつけます。

--version
プログラムのバージョン番号を標準出力に出力し、 input-filesはいっさい読まずに、ただちにm4の実行を終了します。
--help
ヘルプ情報の要約を標準出力へ出力し、 input-filesはいっさい読まずに、ただちにm4の実行を終了します。
-G
--traditional
System V版と比べて、この実装で拡張された機能をすべて抑制します。 これらの一覧はSee Compatibilityを参照してください。
-E
--fatal-warnings
すべての警告(warning)を致命的なものと見なし、 最初の警告が発行された時点でm4の実行を停止し終了します。
-dflags
--debug=flags
デバッグ・レベルをflagsに設定します。 デバッグ・レベルはデバッグ用関数が表示する情報の形式と量の制御に使われます。 flagsの形式と意味についての詳細はSee Debug Levelsを参照してください。
-lnum
--arglength=num
マクロをトレースすることによって生じる出力の量を制限します。 詳細はSee Debug Levelsを参照してください。
-ofile
--error-output=file
デバッグやトレースの出力を名前が指定されたファイルへ リダイレクト(redirect)します。 エラーメッセージは通常どおり標準エラー出力へ出力します。 詳細はSee Debug Outputを参照してください。
-Idir
--include=dir
インクルード指定されたファイルが現在の作業ディレクトリ (current working directory)で見つからない場合に、m4dirを 探すようにします。詳細はSee Search Pathを参照してください。
-e
--interactive
起動時にm4を対話的な状態(interactive)にします。 これは、すべての出力をバッファリング無しで行ない、 割り込み(interrupt)を無視するということを意味します。
-s
--synclines
Cプリプロセッサやそれに類するツールで使うための同期情報を含む行を 生成します。これはm4をコンパイラのフロントエンドとして使う ときなどに便利です。ソースファイル名と行番号の情報は、`#line linenum "filename"'という形式の指令(directive)によって表され、 出力の途中へ必要に応じて挿入されます。この指令(directive)は次の 行が入力ファイルfilenameの第linenum行そのものであるか、 もしくはその行の展開によるものであることを意味します。 `"filename"'の部分は、ファイル名が前の指令(directive)と 変わらない場合はしばしば省かれます。

このような同期指令は、必ずそれ自身で完全な一行に対してのみ与えられます。 ある出力行の途中に同期情報の食い違いがあるときは、 対応する同期指令の出力は次の行へと持ち越されます。

-P
--prefix-builtins
m4の内部に登録されているすべての組み込みマクロの名前を 接頭辞`m4_'が付いたものに変更します。 このオプションを使ったときには、たとえば`define'の代わりに `m4_define'、`__file__'の代わりに`m4___file__'と書かなければ なりません。
-WREGEXP
--word-regexp=REGEXP
マクロ名の字句構成規則を指定します。 このオプションは試験的なものであり、 このオプションを含まないGNU m4の実装も存在する可能性があります。 (see Changeword)
-Hn
--hashsize=n
シンボルを表引きするための内部ハッシュテーブルの項目数をnにします。 この数は素数にするべきです。デフォルトは509項目です。 極端に多くのマクロを定義しないかぎり、この値を増やす必要は無いはずです。
-Ln
--nesting-limit=n
入れ子になったマクロの呼び出しをn段階に制限し、 この制限を超えたときは、プログラムの実行を停止します。 指定がない状態では、入れ子は250段階に制限されています。

このオプションの正確な効力は、動的な再帰構造というよりは、 テキスト上での入れ子構造に対して発揮されるものだと理解したほうが より正しいでしょう。 このオプションは、機械的な方法でm4への複雑な入力を生成したときに 役に立ったという例もありますが、大部分のユーザにとっては無用の長物でしょう。 目障りだということになったときは、 このオプションは(まだ試験段階です)削除されてしまうかも知れません。

このオプションを使っても、再走査(rescanning)による無限ループを抜け出す ことはできません。その一方で、再走査ループは必ずしもメモリや スタック領域を大量に消費するわけではありません。 再走査ループをうまく使えば、複雑で時間のかかる処理をm4に やらせることができます。 この領域に制限をもうけるのは、m4の能力を弱めてしまうことになるでしょう。 異常な使い方の例はいくらでもあります。 `define(`a', `a')a'はもっとも単純なものの例です (しかしsee Compatibility)。 GNU m4がこのようなケースを検出するのを期待するのは、 コンパイラシステムが無限ループを検出し、診断メッセージをだすのを 期待することに似ています。つまり、決定不能ではないとしても、 一般にとてもハードな問題です。

-Q
--quiet
--silent
マクロの呼び出しで、引数が不足していたり余分にあるときの警告を抑制します。
-B
-S
-T
これらのオプションはSystem V版m4との互換性のために存在しますが、 この実装では何の効果もありません。
-Nn
--diversions=n
これらのオプションはGNU m4の以前のバージョンとの互換性のためだけに 存在し、同時に使うことができる出力切替え先(diversion)の数を制御するために 使われていました。現在は固定された制限値がなくなったので、 何の働きもしません。

`-D'や`-U'オプションを使うと、コマンドライン上でマクロを定義したり 削除したりすることができます。これらは次の形式をとります。

-Dname
-Dname=value
--define=name
--define=name=value
どの入力ファイルを読むよりも前に、nameをシンボルテーブルに 登録します。`=value'が省略されたときは、値は空文字列として 解釈します。valueはどんな文字列でもよく、したがって、マクロは入力内で 定義するときと同じように引数を取るものとして定義することもできます。
-Uname
--undefine=name
nameのすでに定義された意味を削除します。 当然、この方法で削除できるのは定義済みのマクロだけです。
-tname
--trace=name
nameを未定義として、しかしトレースが行われるように、シンボルテーブルへ 登録します。 その結果、このマクロは定義された時点からトレースされるようになります。
-Ffile
--freeze-state file
実行が終了すると、凍結状態(frozen state)の内容を指定されたfile (see Frozen files)へ書き出します。
-Rfile
--reload-state file
実行の前に、指定された凍結ファイルfile (see Frozen files)から 内部状態を復元します。

コマンドライン上の残りの引数は、入力ファイルの名前として解釈します。 ファイル名の指定がないときは、標準入力から読み込みます。 ファイル名-は、標準入力を意味するものとして解釈します。

入力ファイルは、指定された順番に読み込みます。 標準入力は1度しか読むことができませんので、ファイル名-は コマンドライン上で1度しか使えません。