2.2 プリプロセッサ機能のコマンドラインオプション

いくつかのオプションによって、m4をよりプリプロセッサらしく動作させられます。コマンドラインでマクロの定義と削除を行い、検索パスを変更し、出力ファイルで入力元を追跡できます。これらの機能を提供するオプションは次のとおりです。

-D name[=value]
--define=name[=value]

nameをシンボルテーブルに登録します。「=value」がない場合、値は空文字列になります。valueには任意の文字列を指定でき、入力中で定義する場合と同様に、引数を取るマクロを定義できます。このオプションは複数回指定できます。ファイル名に対する指定順序には意味があり、同じnameを再定義すると以前の値は失われます。

-I directory
--include=directory

取り込むファイルが現在の作業ディレクトリで見つからない場合、m4がdirectoryを検索するようにします。詳しくは取り込みファイルの検索を参照してください。このオプションは複数回指定できます。

-s
--synclines

Cプリプロセッサなどのツールで使う同期行を生成します。ファイル名に対する指定順序には意味があります。たとえば、m4をコンパイラのフロントエンドとして使う場合に便利です。ソースのファイル名と行番号は、「#line linenum "file"」形式の指示行で伝えられ、必要に応じて出力の途中に挿入されます。この指示行は、次の行が入力ファイルfileのlinenum行目の内容に由来するか、その内容から展開されたことを意味します。ファイル名が直前の指示行から変わっていない場合、「"file"」の部分は省略されることがよくあります。

同期の指示行は、必ずそれ自体で独立した完全な行として出力されます。出力行の途中で同期のずれが生じた場合、対応する同期指示行は、引用文字列やコメントの途中ではない次の改行まで遅延されます。

define(`twoline', `1
2')
⇒#line 2 "stdin"
⇒
changecom(`/*', `*/')
⇒
define(`comment', `/*1
2*/')
⇒#line 5
⇒
dnl no line
hello
⇒#line 7
⇒hello
twoline
⇒1
⇒#line 8
⇒2
comment
⇒/*1
⇒2*/
one comment `two
three'
⇒#line 10
⇒one /*1
⇒2*/ two
⇒three
goodbye
⇒#line 12
⇒goodbye
-U name
--undefine=name

nameにあらかじめ定義されている意味を削除します。当然ながら、この方法で削除できるのは、あらかじめ定義されているマクロだけです。このオプションは複数回指定できます。定義を持たないnameを未定義にしても、何も通知せずに無視します。ファイル名に対する指定順序には意味があります。