Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ imake(1) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

make(1)

IMAKE(1)  —  UNIX Programmer’s Manual

名称

imake − C プリプロセッサの対 make ユーティリティインタフェース

形式

imake [ −Ddefine ] [ −Idirectory ] [ −T ] [ −f imakefile ] [ −s [ makefile ]] [ −v ] [ make options or arguments ]

解説

imake は、テンプレートと Imakefile を使用して、その上で C プリプロセッサを動作し、 /usr/tmp 内に一時的な makefile を作成します。 次に、この事前処理された makefile 上で make を動作します。 下記の実施詳細を参照。

デフォルトによって、 imake はまず現在の作業ディレクトリ内にある Imakefile と命名されたファイルを捜し、失敗した場合は、 imakefile と命名されたファイルを捜します。

オプション

−Ddefine
定義を行います。 この引数は、プリプロセッサ cpp に渡されます。 これは、環境変数 IMAKEINCLUDE でも行うことができます。

−Idirectory
ディレクトリを含めます。 この引数は、プリプロセッサ cpp に渡されます。 これは、環境変数 IMAKEINCLUDE でも行うことができます。

−T template
テンプレートファイル。 デフォルトファイルの Imake.template ではなく、cpp が最初に含むテンプレートファイルを指定します。

−f imakefile
ファイルします。 imake が使用するための 代わりの imakefile を指定します。

−s [ filename ]
表示します。 Imake は、imakefile を前処理し、それを標準出力宛に送ります。 make プログラムは、呼び出されません。 filename 引数が存在しない場合は、出力はその代わりに命名された ファイルに送られます。 通常これは、 −s Makefile です。

−v 多弁(おしゃべり)。 Imake は、使用するコマンド行を表示して、それを実際に実行する前に C プリプロセッサを 呼び出します。

環境変数

Imake は、次の3つの変数の環境を調べます。

IMAKEINCLUDE
この変数が定義されている場合は、これは C プリプロセッサに対して有効な include 引数でなければなりません。 例: “-I/usr/include/local”。 実際に、任意の有効な cpp 引数がここでも有効です。

IMAKECPP
この変数が定義されている場合は、これはプリプロセッサプログラムへの 有効なパスです。 例: “/usr/local/cpp”。 デフォルトによって、 imake は、/lib/cpp を使用します。

IMAKEMAKE
この変数が定義されている場合は、これは make プログラムへの有効な パスです。 例: “/usr/local/make”。 デフォルトによって、 imake は、 make プログラムが execvp(3) を使用して見つけたすべてのものを使用します。

インプリメンテーションの詳細

Imake はまず、Imakefile もしくは imakefile が存在するか否かに応じて、 コマンド行 −f フラグからか、あるいは現在のディレクトリの内容 から imakefile 名を決定します。 これを <imakefile> と呼びます。 imake はまた、コマンド行 −T フラグからか、あるいは デフォルトの Imake.template から、テンプレート名も決定します。 これを <template> と呼びます。

プログラムは次に、makefile を検査して、’#’ 文字で始まるあらゆる行を 捜します。 それが見つかった場合は、 #include、 #define、 #undef、 #ifdef、 #else、 #endif あるいは #if のセットに基づき、それが有効な C プリプロセッサの指示語であるか 否かをチェックします。 そうである場合は、 imake はそれを変更しません。 そうでない場合は、行の初めにナルの C コメント “/∗∗/” を埋め込み、 プリプロセッサがその行を実行しないようにします。 これは、 make スタイルの “#” コメントの使用を保存するのに役に立ちます。 いずれかの行を変更しなければならない場合は、/tmp/tmp-imake.∗ と 命名された一時ファイルが、"埋め込まれた" imakefile を受け取ります。 その行を変更する必要があってもなくても、このファイル を <input-imakefile> と呼びます。

次に、プログラムは次のコマンド行で C プリプロセッサを起動します。

/lib/cpp -I. -I/usr/lib/local/imake.includes -Uunix

これはおそらく IMAKEINCLUDE 環境変数をもつ引数のリスト、 すなわち −I および −D コマンド行引数を プリペンディングしています。 あるいは、プリプロセッサのプログラムを IMAKECPP 環境変数に変更します。 標準入力は、 imake プログラムから行われ、標準出力は、/usr/tmp/tmp-make.∗ 内の 一時ファイルに送られます。 すなわち、−s フラグに対する引数がない場合は、出力はその一時ファイルに 送られます。 このファイルを <makefile> と呼びます。 プリプロセッサに対する入力として用意されている最初の3行は 以下のとおりです。

#define IMAKE_TEMPLATE          "<template>"
#define INCLUDE_IMAKEFILE       "<input-imakefile>"
#include IMAKE_TEMPLATE

これは、テンプレートは最低限以下の行をもっていなければならないことを 暗示していることに注意してください。

#include INCLUDE_IMAKEFILE

次に、 imake はプリプロセッサの全出力をメモリ内に読み込み、入力時に現れる あらゆる2重の ’@’ 記号を取り除きます。 これは、 cpp が通常行う方法では単一行にまとめられない cpp 複数行マクロを書き込むのに 大変便利です。 さらに、あらゆる行での後続する空白行は捨てられ、 make が混乱しないようにします。 そして大半の空白も捨てられます。 たとえばマクロが、

 #defineprogram_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)
 

最後に、 -s オプションが指定されなかった場合は、 imake は以下のプログラムを呼び出します。

make MAKE=<program> MAKEFILE=<imakefile> -f <makefile> makeargs

ここで “makeargs” は、コマンド行上で見つかったいずれかの引数と 置き換えられます。

ファイル

/usr/tmp/tmp-imake.nnnnnncpp に対する一時入力ファイル
/usr/tmp/tmp-make.nnnnnnmake に対する一時入力ファイル
/lib/cppデフォルトの C プリプロセッサ
/usr/lib/local/imake.includesインクルードファイルに対するデフォルトの  ディレクトリ

関連事項

make(1)
S. I. Feldman Make − A Program for Maintaining Computer Programs

著者

Todd Brunhoff; Tektronix, inc. and Project Athena, MIT. 

バグ

Sun 上で動く C プリプロセッサの Cpp は、マクロ展開内のあらゆるタブを 単一スペースに圧縮します。 これはまた、エスケープされた改行を削除しないでスペースと置き換えます。 コード内にはクラッジがあり、これを避けようと試みますが、それは あらゆるターゲットが行内のどこかに ’:’ をもっていて、ターゲットに対する あらゆるアクションは ’:’ をもっていないという事実に依存します。

make- スタイルの ’#’ コメントを Imakefile 内で使用することは できますが、テンプレートや他のインクルードファイル内では使用することは できません。 それらが必要な場合は、C のナルコメントである /∗∗/ を前につけなければ なりません。

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026