m4
では入力のどこででも名前を指定してファイルをインクルード
(include)することができます。
m4
にはファイルをインクルードするための組み込みマクロが2つあります。
include(filename) sinclude(filename)
どちらもfilenameという名前のファイルをm4
に読み込ませます。
そのファイルの終りに達すると以前の入力ファイルから入力を再開します。
したがってinclude
とsinclude
は展開後に
filenameの内容となります。
include
に指定したファイルが存在しないとエラーとなります。
ファイルが存在しない事についてのエラー・メッセージを避けたいときは
sinclude
を使います。
sinclude
は、もしファイルが存在すればそのファイルをインクルードし、
存在しなければ消滅します。
include(`no-such-file') => error-->30.include:2: m4: Cannot open no-such-file: No such file or directory sinclude(`no-such-file') =>
これ以降ファイル`incl.m4'の内容は仮に以下のものだとします。
Include file start foo Include file end
通常、ファイルのインクルードはファイルの内容を入力ストリームに挿入するために
使用されます。
インクルードされたファイルの内容はm4
によって読まれ、
そのファイルに含まれるマクロの呼び出しは展開されます。
define(`foo', `FOO') => include(`incl.m4') =>Include file start =>FOO =>Include file end =>
include
とsinclude
がファイルの内容に展開されることを利用して、
ファイル全体に作用するマクロを定義することができます。
次の例では`bar'が`incl.m4'の内容に展開されるように定義しています。
define(`bar', include(`incl.m4')) => This is `bar': >>>bar<<< =>This is bar: >>>Include file start =>foo =>Include file end =><<<
もっとも、これはinclude
のごく普通の使い方ではありません。
なぜならファイルにはクォート、コンマ、括弧といった
m4
のパーサ(parser)が動作する方法に干渉するものが含まれている可能性が
あるからです。
組み込みマクロinclude
とsinclude
は引数が与えられたときだけ認識されます。
GNU m4
ではインクルード対象のファイルが現在の作業ディレクトリ
(current working directory)とは別のディレクトリにあっても
かまいません。
ファイルが現在の作業ディレクトリで見つからずファイル名が絶対ファイル名(absolute file name)でないとき、GNU m4
は指定されたサーチ・パス(search path)
を使ってそのファイルを探します。
最初に`-I'オプションで指定された各ディレクトリの中を
コマンド・ラインに書かれている順番に探します。
次に環境変数`M4PATH'が設定されているときは、
それをコロン(:)で区切られたディレクトリのリストとして解釈し、
それらの中を順に探します。
インクルード・ファイルの自動サーチがトラブルの原因となったときは、 `p'デバッグ・フラグ(see section デバッグ出力の制御)が問題の切り分けに 役立つでしょう。
Go to the first, previous, next, last section, table of contents.