Manpages

名 前

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 に は 最 上 位 デ ィ レ ク ト リ か ら カ レ ン ト と デ ィ レ ク ト リ へ の 相 対 パ ス を セ ッ ト す る 。
−I
directory こ の オ プ シ ョ ン は 直 接 cpp に 渡 さ れ る 。 こ の オ プ シ ョ ン は 通 常 、 imake の テ ン プ レ ー ト や 設 定 フ ァ イ ル が あ る デ ィ レ ク ト リ を 指 定 す る た め に 使 わ れ る 。
−U
define こ の オ プ シ ョ ン は 直 接 cpp に 渡 さ れ る 。 こ の オ プ シ ョ ン は 通 常 、 imake の 設 定 フ ァ イ ル を デ バ ッ グ す る と き に 変 数 を セ ッ ト 解 除 す る た め に 使 う 。
−T
template こ の オ プ シ ョ ン は 、 cpp が 使 う マ ス タ ー テ ン プ レ ー ト フ ァ イ ル (通 常 は −I で 指 定 さ れ た デ ィ レ ク ト リ に 置 か れ る )の 名 前 を 指 定 す る 。 デ フ ォ ル ト 値 は Imake.tmpl で あ る 。
−f
filename こ の オ プ シ ョ ン は 、 デ ィ レ ク ト リ ご と に 置 く 入 力 フ ァ イ ル の 名 前 を 指 定 す る 。 デ フ ォ ル ト 値 は Imakefile で あ る 。
−C
filename こ の オ プ シ ョ ン は 、 カ レ ン ト デ ィ レ ク ト リ に 作 ら れ る .c フ ァ イ ル の 名 前 を 指 定 す る 。 デ フ ォ ル ト 値 は Imakefile.c で あ る 。
−s
filename こ の オ プ シ ョ ン で は 、 生 成 さ れ る make 記 述 フ ァ イ ル の 名 前 を 指 定 す る が 、 こ の オ プ シ ョ ン を 指 定 し て も make が 実 行 さ れ る こ と は な い 。 filename が ダ ッ シ ュ (−)な ら ば 、 出 力 は stdout に 対 し て 行 わ れ る 。 デ フ ォ ル ト の 動 作 で は Makefile を 生 成 す る が 、 実 行 は し な い 。

−e こ の オ プ シ ョ ン を 指 定 す る と 、

imake は 生 成 し た Makefile を 実 行 す

る 。 デ フ ォ ル ト で は 、 Makefile の 実 行 は ユ ー ザ に 任 さ れ て い る 。

−v こ の オ プ シ ョ ン を 指 定 す る と 、

imakeMakefile の 生 成 に 使 う 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 変 数 が マ ク ロ の そ れ ぞ れ の 呼 び 出 し に お い て 局 所 性 が 必 要 な こ と が あ る 。 こ れ は し ば し ば 、 そ の 値 が マ ク ロ に 渡 さ れ る パ ラ メ ー タ に 依 存 す る た め に 起 こ る 。 こ の よ う な 変 数 は 、 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