Next: , Previous: File Inclusion, Up: File Inclusion


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は引数を与えたときだけ認識されます。