次: Bugs, 前: History, 上: Preliminaries
m4の起動(オプション一覧)m4コマンドを起動するときの形式は次のようになります。
m4 [option...] [macro-definitions...] [input-file...]
オプションは、短いオプション名を使うときは`-'で始め、
長いオプション名を使うときは`--'で始めます。
長いオプション名は、
そのオプションだと明確に特定できる先頭部分を書くだけで十分です。
m4は次のオプションを受けつけます。
--versionm4の実行を終了します。
--helpm4の実行を終了します。
-G--traditional-E--fatal-warningsm4の実行を停止し終了します。
-dflags--debug=flags-lnum--arglength=num-ofile--error-output=file-Idir--include=dirm4がdirを
探すようにします。詳細はSee Search Pathを参照してください。
-e--interactivem4を対話的な状態(interactive)にします。
これは、すべての出力をバッファリング無しで行ない、
割り込み(interrupt)を無視するということを意味します。
-s--synclinesm4をコンパイラのフロントエンドとして使う
ときなどに便利です。ソースファイル名と行番号の情報は、`#line
linenum "filename"'という形式の指令(directive)によって表され、
出力の途中へ必要に応じて挿入されます。この指令(directive)は次の
行が入力ファイルfilenameの第linenum行そのものであるか、
もしくはその行の展開によるものであることを意味します。
`"filename"'の部分は、ファイル名が前の指令(directive)と
変わらない場合はしばしば省かれます。
このような同期指令は、必ずそれ自身で完全な一行に対してのみ与えられます。
ある出力行の途中に同期情報の食い違いがあるときは、
対応する同期指令の出力は次の行へと持ち越されます。
-P--prefix-builtinsm4の内部に登録されているすべての組み込みマクロの名前を
接頭辞`m4_'が付いたものに変更します。
このオプションを使ったときには、たとえば`define'の代わりに
`m4_define'、`__file__'の代わりに`m4___file__'と書かなければ
なりません。
-WREGEXP--word-regexp=REGEXPm4の実装も存在する可能性があります。
(see Changeword)
-Hn--hashsize=n-Ln--nesting-limit=nこのオプションの正確な効力は、動的な再帰構造というよりは、
テキスト上での入れ子構造に対して発揮されるものだと理解したほうが
より正しいでしょう。
このオプションは、機械的な方法でm4への複雑な入力を生成したときに
役に立ったという例もありますが、大部分のユーザにとっては無用の長物でしょう。
目障りだということになったときは、
このオプションは(まだ試験段階です)削除されてしまうかも知れません。
このオプションを使っても、再走査(rescanning)による無限ループを抜け出す
ことはできません。その一方で、再走査ループは必ずしもメモリや
スタック領域を大量に消費するわけではありません。
再走査ループをうまく使えば、複雑で時間のかかる処理をm4に
やらせることができます。
この領域に制限をもうけるのは、m4の能力を弱めてしまうことになるでしょう。
異常な使い方の例はいくらでもあります。
`define(`a', `a')a'はもっとも単純なものの例です
(しかしsee Compatibility)。
GNU m4がこのようなケースを検出するのを期待するのは、
コンパイラシステムが無限ループを検出し、診断メッセージをだすのを
期待することに似ています。つまり、決定不能ではないとしても、
一般にとてもハードな問題です。
-Q--quiet--silent-B-S-Tm4との互換性のために存在しますが、
この実装では何の効果もありません。
-Nn--diversions=nm4の以前のバージョンとの互換性のためだけに
存在し、同時に使うことができる出力切替え先(diversion)の数を制御するために
使われていました。現在は固定された制限値がなくなったので、
何の働きもしません。
`-D'や`-U'オプションを使うと、コマンドライン上でマクロを定義したり 削除したりすることができます。これらは次の形式をとります。
-Dname-Dname=value--define=name--define=name=value-Uname--undefine=name-tname--trace=name-Ffile--freeze-state file-Rfile--reload-state fileコマンドライン上の残りの引数は、入力ファイルの名前として解釈します。 ファイル名の指定がないときは、標準入力から読み込みます。 ファイル名-は、標準入力を意味するものとして解釈します。
入力ファイルは、指定された順番に読み込みます。 標準入力は1度しか読むことができませんので、ファイル名-は コマンドライン上で1度しか使えません。