[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

8. ファイルのインクルード

m4では入力のどこででも名前を指定してファイルをインクルード (include)することができます。


8.1 名前を指定してファイルをインクルードする

m4にはファイルをインクルードするための組み込みマクロが2つあります。

 
include(filename)
sinclude(filename)

どちらもfilenameという名前のファイルをm4に読み込ませます。 そのファイルの終りに達すると以前の入力ファイルから入力を再開します。

したがってincludesincludeは展開後に 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
⇒

includesincludeがファイルの内容に展開されることを利用して、 ファイル全体に作用するマクロを定義することができます。 次の例では`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)の働き方に干渉するものがランダムに含まれている可能性が あるからです。

組み込みマクロincludesincludeは引数を与えたときだけ認識されます。


8.2 インクルードするファイルのサーチ

GNU m4ではインクルード対象のファイルが現在の作業ディレクトリ (current working directory)とは別のディレクトリにあっても かまいません。

ファイルが現在の作業ディレクトリで見つからずファイル名が絶対ファイル名 (absolute file name)でないとき、GNU m4は指定されたサーチパス (search path)を使ってそのファイルを探します。 最初に`-I'オプションで指定された各ディレクトリの中を コマンドラインに書かれている順番に探します。 次に環境変数`M4PATH'が設定されているときは、 それをコロン(:)で区切られたディレクトリのリストとして解釈し、 それらの中を順に探します。

インクルードファイルの自動サーチがトラブルの原因となったときは、 `p'デバッグフラグ(see section デバッグ出力の制御)が問題の切り分けに 役立つでしょう。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.