名 前
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 は 文 字 列 ’’@@’’ が 現 れ る と 、 こ れ を 改 行 に 置 き 換 え る 。 例 え ば 、 次 の マ ク ロ
program_target(program, objlist) |
@@\ | |||
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つ の 特 別 な 変 数 TOPDIR と CURDIR が セ ッ ト さ れ る 。 例 え ば 、 lib/X/ に お け る Makefile を 作 る た め 、 次 の コ マ ン ド が 自 動 的 に 生 成 さ れ る (ソ ー ス の 最 上 位 デ ィ レ ク ト リ か ら の 相 対 パ ス ):
% ../.././config/imake −I../.././config \ |
|||
−DTOPDIR=../../. −DCURDIR=./lib/X ソ ー ス ツ リ ー に 含 ま れ な い X の プ ロ グ ラ ム を 構 築 す る 際 に は 、 特 殊 な シ ン ボ ル UseInstalled が 定 義 さ れ 、 TOPDIR と CURDIR は 無 視 さ れ る 。 設 定 フ ァ イ ル が 正 し く イ ン ス ト ー ル さ れ て い れ ば 、 ス ク リ プ ト xmkmf(1) を 使 う こ と が で き る 。 |
入 力 フ ァ イ ル
X に 使 わ れ る と き に imake が 読 む フ ァ イ ル に つ い て の 概 略 を 示 す 。 字 下 げ は 、 他 の フ ァ イ ル を イ ン ク ル ー ド す る こ と を 示 す 。
一 般 的 な 変 数
| ||
サ イ ト 固 有 、
BeforeVendorCF が 定 義 さ れ
る | ||
マ シ ン 固 有 | ||
共 有 ラ イ ブ ラ
リ の 規 則 | ||
サ イ ト 固 有 、
AfterVendorCF が 定 義 さ れ
る | ||
規 則 | ||
X 特 有 の 変 数 | ||
共 有 ラ イ ブ ラ リ に つ い て の 変 数 |
Imakefile
ラ イ ブ ラ リ に
つ い て の 規 則 | ||
サ ー バ に つ い
て の 規 則 | ||
マ ル チ ス レ ッ ド に つ い て の 規 則 |
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