2.2 プリプロセッサ機能のコマンドラインオプション
いくつかのオプションによって、m4をよりプリプロセッサらしく動作させられます。コマンドラインでマクロの定義と削除を行い、検索パスを変更し、出力ファイルで入力元を追跡できます。これらの機能を提供するオプションは次のとおりです。
-D name[=value]--define=name[=value]nameをシンボルテーブルに登録します。「=value」がない場合、値は空文字列になります。valueには任意の文字列を指定でき、入力中で定義する場合と同様に、引数を取るマクロを定義できます。このオプションは複数回指定できます。ファイル名に対する指定順序には意味があり、同じnameを再定義すると以前の値は失われます。
-I directory--include=directory取り込むファイルが現在の作業ディレクトリで見つからない場合、
m4がdirectoryを検索するようにします。詳しくは取り込みファイルの検索を参照してください。このオプションは複数回指定できます。-
-s --synclinesCプリプロセッサなどのツールで使う同期行を生成します。ファイル名に対する指定順序には意味があります。たとえば、
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=namenameにあらかじめ定義されている意味を削除します。当然ながら、この方法で削除できるのは、あらかじめ定義されているマクロだけです。このオプションは複数回指定できます。定義を持たないnameを未定義にしても、何も通知せずに無視します。ファイル名に対する指定順序には意味があります。