http://www.sendmail.org/m4/intro_m4.html
M4 入門
sendmail は M4 マクロプロセッサを使用して、
設定ファイル(*.mc) をコンパイルします。
理解しておかねばならないことで最も重要なのは、
M4 は文字単位の処理であるということです。
すなわち、行の概念はありません。
このため、マクロ内には ``dnl'' という ``delete through newline''
(改行まで削除を行なう) の略語が数個所で見られます。
つまり、``dnl'' で
始まり次の改行までのすべての文字を改行を含めて削除するということです。
この機能を利用する
ほとんどの場合は
コンパイル結果に沢山の不要な空白行を生成しないようにすることです。
他の重要な指示子は、
マクロ ``A'' が値 ``B'' を持つことを定義する、
define(A, B) です。
マクロは読みこまれると(予め)定義された値を展開します。
そのため、通常は両方の値を引用符で囲むことで展開されないようにします。
例えば、
define(`SMART_HOST', `smart.foo.com')
の様にします。
ひとつ注意しておかねばならない点があります。コメントであるように見える
行においても、M4 マクロは展開されてしまいます。たとえば、
# See FEATURE(`foo') above
という記述は、FEATURE(`foo') が展開されてしまうため、おそらく期待した
結果にはならないでしょう。また、
# And then define the $X macro to be the return address
についても、``define'' が M4 マクロのキーワードであるため同様に期待し
た結果にはならないでしょう。もしこのようなコメント行を使いたい場合、
向かい合わせの引用符で
`このように'
囲みます。
|