Provided by: xmanpages-ja_4.1.0.20011224-6_all bug

imake の動作
       imake は、コマンド行で -I オプションや -D オプ ションを渡してcpp を起動
       し、次の内容を持つファイル名を渡す。

                 #define IMAKE_TEMPLATE "Imake.tmpl"
                 #define INCLUDE_IMAKEFILE <Imakefile>
                 #include IMAKE_TEMPLATE

       このとき、Imake.tmpl  の部分はコマンドの -T オプションで書 き換えられる
       ことがあり、Imakefile の部分は -f  オプション  で書き換えられることがあ
       る。

       IMAKE_TEMPLATE  は通常、マシン依存のパラメータ(cpp  のシンボルで指 定す
       る)が書かれたファイル、サイト特有のパラメータファイル、変数を定義  する
       ファイル、make を生成するための cpp のマクロ関数が書か れたファイル、カ
       レントディレクトリの   Imakefile   (INCLUDE_IMAKEFILE   で指定する)を読
       む。Imakefile   は、このマクロ関  数を用いて生成すべき対象を示す。imake
       は、責任を持って適切な規則 を生成する。

       Imake の設定ファイルは、2つのタイプの変数を持つ。すなわち、imake 変数と
       make 変数である。imake 変数は imake を実行した際に cpp によって解釈され
       る。慣習により、imake    変数の名前は    大文字と小文字が混ざった形とな
       る。make  変数は Makefile に書き込まれ、後で make に解釈される。 慣習に
       より、make 変数の名前は大文字で書かれる。

       規則ファイル(通常は設定ディレクトリの Imake.rules)には、現在のプ ラット
       フォームにしたがって設定された  cpp マクロ関数群が記述され ている。マク
       ロが複数行の make 規則を生成できるように、 imake は文字列 ``@@'' が現れ
       ると、これを改行に置き換える。 例えば、次のマクロ
        #define  program_target(program, objlist)        @@\
        program: objlist                                 @@\
                 $(CC)  -o  $@  objlist  $(LDFLAGS)

       は、 program_target(foo, foo1.o  foo2.o) で呼ばれたとき、

        foo:     foo1.o  foo2.o
                 $(CC)  -o  $@  foo1.o  foo2.o  $(LDFLAGS)

       のように展開される。

       imake  は  ``XCOMM'' が現れると、これを ``#'' 文字に置換する。 これによ
       り、プリプロセッサに ``invalid  directive''  エラーを出させるこ  となく
       Makefile にコメントを置くことができる。

       複雑な  imake の場合、生成される make 変数がマクロのそれぞ れの呼び出し
       において局所性が必要なことがある。これはしばしば、その値 がマクロに渡さ
       れるパラメータに依存するために起こる。  このような変数は、XVARdefn の形
       式の imake 変数を使っ て作ることができる。ここで、n は1桁の数字である。
       一意に決まる   make  には代入が行われる。後で変数  XVARusen  が現れたと
       き、これは対応する XVARdefn によって生成された変数に置き換えられる。

       cpp         が複数のタブや空白を1つの空白に減らすようなシステムにおいて
       は、imake は必要なタブを戻そうと試みる(make はタブと空白の 違いに大変厳
       しい)。このため、コマンド行ではコロン(:)の前にバックス  ラッシュ(\)を置
       かなければならない。

X ウィンドウシステムでの利用
       X  ウィンドウシステムは、ソースからのシステム全体の構築と外部ソフトウェ
       アの構築の両方で imake を広く用いる。先に述べたように、相対パス  名を用
       いたファイルの参照を容易にするために2つの特別な変数 TOPDIRCURDIR が
       セットされる。例えば、lib/X/ における Makefile を作るため、次のコマンド
       が自動的に生成される(ソースの最 上位ディレクトリからの相対パス):

                 %  ../.././config/imake  -I../.././config  \
                       -DTOPDIR=../../.   -DCURDIR=./lib/X

       ソースツリーに含まれない  X  のプログラムを構築する際には、特殊なシンボ
       ル UseInstalled が定義され、TOPDIRCURDIR は無視  される。設定ファイ
       ルが正しくインストールされていれば、スクリプト  xmkmf(1) を使うことがで
       きる。

入力ファイル
       X に使われるときに  imake  が読むファイルについての概略を示す。  字下げ
       は、他のファイルをインクルードすることを示す。

           Imake.tmpl                一般的な変数
               site.def              サイト固有、BeforeVendorCF が定義される
               *.cf                  マシン固有
                   *Lib.rules        共有ライブラリの規則
               site.def              サイト固有、AfterVendorCF が定義される
               Imake.rules           規則
               Project.tmpl          X 特有の変数
                   *Lib.tmpl         共有ライブラリについての変数
               Imakefile
                   Library.tmpl      ライブラリについての規則
                   Server.tmpl       サーバについての規則
                   Threads.tmpl      マルチスレッドについての規則

       site.def は2度インクルードされる点に注意せよ。1度目は *.cf ファイルの前
       で、次はこのファイルの後である。サイトにおけるカスタマイズ のほとんどは
       *.cf  ファイルの後でなければならないが、コンパイラの 選択のように先に指
       定しなければならないものもある。他の変数設定がこれら に依存しているから
       である。

       最初に  site.def をインクルードしたときには変数 BeforeVendorCF が定義さ
       れ、2度目にインクルードしたときには変数   AfterVendorCF   が定義さ   れ
       る。site.def の全てのコードはどちらかのシンボルについての #ifdef の内側
       に置かれているはずである。

ファイル
       Imakefile.c                   cpp の入力に使う一時ファイル
       /tmp/Imf.XXXXXX               -s のための一時的な Makefile
       /tmp/IIf.XXXXXX               指定した Imakefile が #  形式のコメントを
       使っている場合の一時的な Imakefile
       /lib/cpp                      デフォルトの C プリプロセッサ

関連項目
       make(1), xmkmf(1)
       S.  I. Feldman, Make  
       

環境変数
       以下の環境変数を設定することができる。ただし、これらは imake が  実行さ
       れるときに容易にはわからない依存関係をもたらすため、あまり使わな いほう
       がよい。

       IMAKEINCLUDE
            この環境変数が定義された場合、C プリプロセッサにインクルードの引き
            数 ``-I'' を渡すことを指定。例: ``-I/usr/X11/config''.

       IMAKECPP
            この環境変数が定義された場合、これはプリプロセッサのプログラムの有
            効な パスでなければならない。 例: ``/usr/local/cpp''.   デフォルト
            では、 imake は /lib/cpp を用いる。

       IMAKEMAKE
            この環境変数が定義された場合、これは  ``/usr/local/make'' のような
            make  プログラムの有効なパスでなければならない。  デフォルトでは、
            execvp(3)  を使って見つけた make を使用する。 この環境変数が使用さ
            れるのは、``-e'' オプションが指定されたときだけで ある。

著者
       Todd Brunhoff, Tektronix and MIT Project  Athena;  Jim  Fulton,  MIT  X
       Consortium