imake - make
ユーティリティに対する
C
プリプロセッサのインタフェース
imake [
-Ddefine ] [
-Idir ] [
-Udefine ] [
-Ttemplate ] [
-f
filename ] [
-C filename ] [
-s filename ]
[
-e ] [
-v ]
imake
は、テンプレート、
cpp マクロ関数群、
Imakefile と呼ばれるディ
レクトリごとの入力ファイルから
Makefile
を生成する。これを使うこ
とにより、プログラムを構築するための様々な要素の記述から、マシンに依存
する部分(コンパイラのオプション、異なるコマンド名、特別な
make
の規則など)を切り離すことができる。
オプション¶
以下のコマンド行オプションは
imake に渡される。
- -Ddefine
- このオプションは直接
cpp
に渡される。このオプションは通常、ディ
レクトリ固有の変数をセットするために使われる。例えば、Xウィンドウシス
テムはこのフラグを使って、
TOPDIR
にコアディストリビューションの
最上位ディレクトリの名前をセットし、
CURDIR
には最上位ディレクト
リからカレントとディレクトリへの相対パスをセットする。
- -Idirectory
- このオプションは直接
cpp
に渡される。このオプションは通常、
imake
のテンプレートや設定ファイルがあるディレクトリを指定するた
めに使われる。
- -Udefine
- このオプションは直接
cpp
に渡される。このオプションは通常、
imake
の設定ファイルをデバッグするときに変数をセット解除するため
に使う。
- -Ttemplate
- このオプションは、cpp
が使うマスターテンプレートファイル(通常は
-I
で指定されたディレクトリに置かれる)の名前を指定する。
デフォルト値は Imake.tmpl
である。
- -f filename
- このオプションは、ディレクトリごとに置く入力ファイルの名前を指定する。
デフォルト値は Imakefile
である。
- -C filename
- このオプションは、カレントディレクトリに作られる
.c
ファイルの名前を指
定する。デフォルト値は
Imakefile.c である。
- -s filename
- このオプションでは、生成される
make
記述ファイルの名前を指定する
が、このオプションを指定しても
make
が実行されることはない。
filename
がダッシュ(-)ならば、出力は
stdout に対して行わ
れる。デフォルトの動作では
Makefile
を生成するが、実行はしない。
- -e
- このオプションを指定すると、imake
は生成した Makefile を実
行する。デフォルトでは、
Makefile
の実行はユーザに任されている。
- -v
- このオプションを指定すると、imake
は Makefile の生成に使う
cpp
のコマンド行を表示する。
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
変数がマクロのそれぞ
れの呼び出しにおいて局所性が必要なことがある。これはしばしば、その値
がマクロに渡されるパラメータに依存するために起こる。
このような変数は、
XVARdef n の形式の
imake
変数を使っ
て作ることができる。ここで、
n
は1桁の数字である。
一意に決まる
make
には代入が行われる。後で変数
XVARusen
が現れたとき、これは対応する
XVARdefn
によって生成された変数に置き換えられる。
cpp
が複数のタブや空白を1つの空白に減らすようなシステムにおいて
は、
imake
は必要なタブを戻そうと試みる(
make はタブと空白の
違いに大変厳しい)。このため、コマンド行ではコロン(:)の前にバックス
ラッシュ(\)を置かなければならない。
X
ウィンドウシステムでの利用¶
X
ウィンドウシステムは、ソースからのシステム全体の構築と外部ソフトウェ
アの構築の両方で
imake
を広く用いる。先に述べたように、相対パス
名を用いたファイルの参照を容易にするために2つの特別な変数
TOPDIR と
CURDIR
がセットされる。例えば、
lib/X/ における
Makefile
を作るため、次のコマンドが自動的に生成される(ソースの最
上位ディレクトリからの相対パス):
% ../.././config/imake -I../.././config \
-DTOPDIR=../../. -DCURDIR=./lib/X
ソースツリーに含まれない
X
のプログラムを構築する際には、特殊なシンボ
ル
UseInstalled
が定義され、
TOPDIR と
CURDIR は無視
される。設定ファイルが正しくインストールされていれば、スクリプト
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