Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ imake(1) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

make(1)

IMAKE(1)  —  NEWS-OS Programmer’s Manual

名称

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

形式

imake [−Ddefine] [−Idir] [−Ttemplate] [−f filename] [−s filename] [−e] [−v]

解説

imake は、 cpp のマクロ機能の集合である テンプレートから Makefiles を作成するのに用いられます。 ディレクトリごとの入力ファイルは Imakefile と呼ばれます。 これにより、構築のための様々な項目の記述から 計算機依存の部分 (コンパイラオプションやコマンド名の違い、特別な make ルールなど) を分離しておくことを可能にします。

オプション

以下のコマンド行オプションが受け付けられます。

−Ddefine
このオプションは直接 cpp に渡されます。 これは大抵ディレクトリに関する変数を設定するのに利用されます。 例えば X ウィンドウシステムでは、 TOPDIR に中心配布物のトップディレクトリ名を、 CURDIR にカレントディレクトリ名を トップディレクトリからの相対パスで設定するのに使われています。

−Idirectory
このオプションは直接 cpp に渡されます。 これは imake 用のテンプレートファイルと構成ファイルを捜すべき ディレクトリを指示するのに使われます。

−Ttemplate
cpp のマスターテンプレートファイルの名前を指示します。 (このファイルは通常 −I オプションで指定されたディレクトリにあります) デフォルトは Imake.tmpl です。

−f filename
ディレクトリ毎入力ファイルの名前を指定します。 デフォルトは Imakefile です。

−s filename
作成する make の記述ファイルの名前を指定します。 make の実行はしません。 filename としてダッシュ (−) が指定されると、 出力が stdout になります。 デフォルトではmake の実行はせず、 ファイル Makefile を作成するだけです。

−e imake に、作成された Makefile を実行するように指示します。 デフォルトでは実行はユーザに任されています。

−v Makefile を作成するのに用いる cpp のコマンド行を 出力するよう指示します。

動作

imake はコマンド行で指定された オプション −I や -D とともに cpp を起動し、 以下の 3 行を送り込みます。

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

コマンドオプション−T か −f が指定されていると、 Imake.tmpl 、 Imakefile はそれで置き換えられます。 Imakefile 中に cpp の疑似命令 (#include、#define、#undef、#ifdef、 #else、 #endif、#if) でない、文字 ’#’ で始まる行があると、 imake は一時的な makefile 中に その先頭に文字列 “/∗∗/” を挿入した行を作成します。 これにより cpp は この行を Makefile でのコメントとなるようにコピーします。

Imakefile は、 機種依存のパラメータ(cpp のシンボルとして指定される)ファイル、 サイト依存パラメータファイル、 cpp の make ルールを生成するためのマクロ関数を含むファイル、 カレントディレクトリの Imakefile (この名前は INCLUDE_IMAKEFILE で指定される)を、 この順で読み込むようになっています。 Imakefile では、どのターゲットを作成するかを表すマクロ関数が使われ、 imake が適切なルールの作成を行います。

ルールファイル(通常、構成ディレクトリ中に Imake.rules という名前で 存在する)には、 そのプラットフォーム用に構成された 様々な cpp のマクロ関数が含まれます。 1 行以上の make ルールを生成するマクロを作れるよう、 Imake は文字列 “@@” を改行文字に置換えます。 例えば、以下のようなマクロが定義されているとき、

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

のように展開されます。

cpp が複数のタブと空白を単一の空白に置き換えてしまうようなシステムでは、 imake は必要なタブ (make ではタブと空白の違いは重要)を再生しようとします。 このため、コマンド行のコロンには逆スラッシュ(\)を前置しなければなりません。

X ウィンドウシステムでの使用

X ウィンドウシステムにおいて imake は、 ソースツリーと外部ソフトウェアの構築に広く使用されています。 前述のように、 ファイルの相対パス名での参照を容易にするため、 ふたつの特殊な変数 TOPDIR と CURDIR が設定されます。 例えば、 ディレクトリ lib/X/ (ソースツリーのトップに相対で)中に Makefile を作成するために、 以下のコマンドが自動的に作成されます。

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

X のプログラムをソースツリーの外側で作成するときには、 特殊なシンボル UseInstalled を定義し、 TOPDIR と CURDIR は省略します。 構成ファイルが正しくインストールされているなら、 適正なオプションを指定するのに、 以下のようにシェルスクリプト xmkmf(1) が利用できます。

%  xmkmf

どのサブディレクトリでも、 コマンド make Makefiles で Makefiles を作成することができます。

関連ファイル

/usr/tmp/tmp-imake.nnnnnncpp 用の一時入力ファイル
/usr/tmp/tmp-make.nnnnnnmake 用の一時入力ファイル
/lib/cppデフォルトの C プリプロセッサ

関連事項

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

環境変数

以下のような環境変数が設定できますが、 それが、imake の実行時に解り難い依存関係がもたらすため、 あまり勧められません。

IMAKEINCLUDE
C preprocessor.  E.g. この変数が定義されているなら、 その値は C プリプロセッサに対して有効な include 引数でなければなりません。 (例 : “-I/usr/include/local”) 実際には、任意の有効な cpp 引数が使えます。

IMAKECPP
この変数が定義されているなら、 その値は有効なプリプロセッサプログラムのパスでなければなりません。 (例 : “/usr/local/cpp”) デフォルトでは、 imake は、/lib/cpp を使用します。

IMAKEMAKE
この変数が定義されているなら、 その値は有効な make プログラムのパスでなければなりません。 (例 : “/usr/local/make”) デフォルトでは、 imake は、make プログラムを execvp(3) を使用して見つけ、実行します。

バグ

cpp から保護するために、 コメントの前には “/∗∗/#” を付加する必要があります。

著者

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

NEWS-OSRelease 4.1C

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