Manpages

名 前

makedepend − Makefile に お け る 依 存 関 係 を 生 成 す る

書 式

makedepend [ −Dname=def ] [ −Dname ] [ −Iincludedir ] [ −Yincludedir ] [ −a ] [ −fmakefile ] [ −oobjsuffix ] [ −pobjprefix ] [ −sstring ] [ −wwidth ] [ −v ] [ −m ] [ −− otheroptions −− ] sourcefile ...

説 明

makedepend プ ロ グ ラ ム は sourcefile の そ れ ぞ れ を 順 に 読 み 込 み 、 C の プ リ プ ロ セ ッ サ と 同 様 に 解 析 す る 。 こ の 際 に は 、 #include デ ィ レ ク テ ィ ブ が コ ン パ イ ル 時 に ど の よ う に 使 わ れ る か を 正 し く 知 る た め 、 #include, #define, #undef, #ifdef, #ifndef, #endif, #if, #elif #else の 全 て を 処 理 す る 。 全 て の #include デ ィ レ ク テ ィ ブ は 、 他 の #include を 含 ん で い る フ ァ イ ル を 参 照 す る こ と が で き 、 こ れ ら の フ ァ イ ル に お い て も デ ィ レ ク テ ィ ブ の 解 析 が 行 わ れ る 。

sourcefile が 直 接 ・ 間 接 的 に 含 ん で い る 全 て の フ ァ イ ル が 、 makedepend の 文 脈 に お い て 依 存 関 係 と 呼 ば れ る も の で あ る 。 こ の 依 存 性 は 、 依 存 性 が 変 化 し た と き に 再 コ ン パ イ ル す べ き フ ァ イ ル を make(1) に 指 示 す る 方 法 で makefile に 書 き 込 ま れ る 。 デ フ ォ ル ト の 動 作 で は 、 makedependmakefile と い う 名 前 の フ ァ イ ル が あ れ ば 、 こ れ に 出 力 を 書 き 込 む 。 こ の フ ァ イ ル が な い 場 合 に は 、 Makefile に 出 力 を 書 き 込 む 。 −f オ プ シ ョ ン を 使 う と 、 別 の 名 前 の makefile を 指 定 す る こ と が で き る 。 makedepend は 依 存 関 係 の 出 力 の 区 切 り を 見 つ け る た め 、 ま ず makefile 中 で

# DO NOT DELETE THIS LINE −− make depend depends on it. と い う 行 か 、 −s オ プ シ ョ ン で 与 え ら れ た 行 を 探 す 。 こ の 行 が 見 つ か っ た 場 合 に は 、 そ こ か ら makefile の 末 尾 ま で は 全 て 削 除 さ れ 、 こ こ か ら makedepend の 出 力 が 行 わ れ る 。 見 つ か ら な か っ た 場 合 に は 、 プ ロ グ ラ ム は make フ ァ イ ル の 末 尾 に こ の 文 字 列 が 追 加 さ れ 、 出 力 は そ れ 以 降 に 行 わ れ る 。 コ マ ン ド 行 で 指 定 さ れ た sourcefile の そ れ ぞ れ に 対 し 、 makedepend

sourcefile.o: dfile .. の 形 式 の 行 を makefile に 書 き 込 む 。 こ こ で 、 sourcefile.o は コ マ ン ド 行 で 与 え ら れ た 名 前 の サ フ ィ ッ ク ス を ’’.o’’ に 置 き 換 え た も の で あ り 、 dfilesourcefile を 解 析 し て い る 時 に #include デ ィ レ ク テ ィ ブ 内 で 発 見 さ れ た 依 存 関 係 、 つ ま り そ の フ ァ イ ル が イ ン ク ル ー ド し て い る フ ァ イ ル で あ る 。

’’make depend’’ と 打 ち 込 め ば makefile の 依 存 関 係 を 最 新 の 状 態 に で き る よ う に す る た め 、 通 常 は makedepend は makefile 中 の タ ー ゲ ッ ト と し て 使 わ れ る 。 こ の 例 を 示 す :
SRCS = file1.c file2.c ...
CFLAGS = −O −DHACK −I../foobar −xyz
depend:
makedepend −− $(CFLAGS) −− $(SRCS)

オ プ シ ョ ン

ユ ー ザ が cc(1) と 同 じ オ プ シ ョ ン を 使 え る よ う に す る た め 、 こ の プ ロ グ ラ ム は 処 理 で き な い オ プ シ ョ ン は 全 て 無 視 す る 。

−Dname=def ま た は −Dname 定 義 を 行 う 。 こ の オ プ シ ョ ン を 指 定 す る と makedepend の シ ン ボ ル テ ー ブ ル 内 に name に 対 す る 定 義 が 作 ら れ る 。 =def を 指 定 し な か っ た 場 合 に は 、 シ ン ボ ル は ’’1’’ と 定 義 さ れ る 。
−I
includedir イ ン ク ル ー ド デ ィ レ ク ト リ を 指 定 。 こ の オ プ シ ョ ン を 指 定 す る と 、 makedepend#include デ ィ レ ク テ ィ ブ を 処 理 す る と き に 検 索 す る デ ィ レ ク ト リ の リ ス ト を includedir の 最 後 に 追 加 す る 。 デ フ ォ ル ト で は makedepend は 標 準 の イ ン ク ル ー ド デ ィ レ ク ト リ (普 通 は /usr/include だ が 、 コ ン パ イ ラ 固 有 の デ ィ レ ク ト リ も 含 ま れ る こ と が あ る )だ け を 検 索 す る 。
−Y
includedir 全 て の 標 準 イ ン ク ル ー ド デ ィ レ ク ト リ を 、 指 定 し た 1つ の イ ン ク ル ー ド デ ィ レ ク ト リ に 置 き 換 え る 。 単 に 標 準 の イ ン ク ル ー ド デ ィ レ ク ト リ の 検 索 を さ せ た く な い 場 合 に は 、 includedir を 省 略 す る こ と が で き る 。

−a 依 存 関 係 部 分 の 置 き 換 え は 行 わ な い で 、 フ ァ イ ル の 末 尾 に 追 加 す る よ う に す る 。

−fmakefile フ ァ イ ル 名 を 指 定 す る 。 こ の オ プ シ ョ ン に よ り 、 makedepend の 出 力 先 に 別 の makefile を 指 定 す る こ と が で き る 。 ’’−’’ を フ ァ イ ル 名 に 指 定 す る こ と (つ ま り −f−)に よ り 、 既 存 の フ ァ イ ル を 修 正 す る の で は な く 、 標 準 出 力 に 出 力 を 行 う こ と が で き る 。
−o
objsuffix オ ブ ジ ェ ク ト フ ァ イ ル の サ フ ィ ッ ク ス 。 シ ス テ ム に よ っ て は 、 オ ブ ジ ェ ク ト フ ァ イ ル の サ フ ィ ッ ク ス が ’’.o’’ で な い か も し れ な い 。 こ の オ プ シ ョ ン を 使 っ て 別 の サ フ ィ ッ ク ス を 指 定 す る こ と が で き る 。 例 え ば 、 −o.b に よ っ て サ フ ィ ッ ク ス ’’.b’’ を す る こ と や 、 −o:obj に よ っ て ’’:obj’’ を 指 定 す る こ と が で き る 。
−p
objprefix オ ブ ジ ェ ク ト フ ァ イ ル の プ レ フ ィ ッ ク ス を 指 定 す る 。 プ レ フ ィ ッ ク ス が オ ブ ジ ェ ク ト フ ァ イ ル の 名 前 の 最 初 に 追 加 さ れ る 。 こ の オ プ シ ョ ン は 通 常 、 他 の デ ィ レ ク ト リ に あ る オ ブ ジ ェ ク ト フ ァ イ ル を 指 定 す る と き に 使 う 。 デ フ ォ ル ト で は プ レ フ ィ ッ ク ス は 空 文 字 列 で あ る 。
−s
string 区 切 り 文 字 列 を 開 始 す る 。 こ の オ プ シ ョ ン を 使 う と 、 makedepend が makefile 内 で 別 の 区 切 り 文 字 列 を 探 す よ う に 指 定 で き る 。
−w
width 行 の 幅 を 指 定 。 可 読 性 の た め 、 通 常 makedepend は 出 力 す る 全 て の 行 が 78文 字 を 越 え な い こ と を 保 証 し て い る 。 こ の オ プ シ ョ ン を 使 う と こ の 幅 を 変 え る こ と が で き る 。

−v 詳 し い 表 示 を 行 う 。 こ の オ プ シ ョ ン を 指 定 す る と 、

makedepend は そ れ

ぞ れ の フ ァ イ ル が イ ン ク ル ー ド し た フ ァ イ ル の リ ス ト を 標 準 出 力 に 出 力 す る 。

−m 複 数 回 の イ ン ク ル ー ド に 対 し て 警 告 表 示 を 行 う 。 こ の オ プ シ ョ ン を 指 定 す る と 、 あ る フ ァ イ ル が 他 の フ ァ イ ル を 複 数 回 イ ン ク ル ー ド し た 際 に は

makedepend が 警 告 を 出 す 。 以 前 の バ ー ジ ョ ン の makedepend で は こ れ は デ フ ォ ル ト の 動 作 で あ っ た 。 複 数 回 の イ ン ク ル ー ド を エ ラ ー と み な さ な い よ う な C コ ン パ イ ラ の 動 作 に も う ま く 適 合 で き る よ う に 、 こ の デ フ ォ ル ト 動 作 は 変 更 さ れ た 。 こ の オ プ シ ョ ン は 以 前 と の 互 換 性 の た め に 残 さ れ て お り 、 複 数 回 の イ ン ク ル ー ド に 関 連 す る 問 題 の デ バ ッ グ に 利 用 で き る 。
−−
options −− 引 き 数 リ ス ト 内 に "−−" が あ る 場 合 、 そ の 後 に 続 く makedepend が 認 識 で き な い 引 き 数 は 無 視 さ れ る (関 連 す る メ ッ セ ー ジ も 表 示 さ れ な い )。 こ の 特 別 な 扱 い は 、 再 び "−−" が 現 れ る ま で 続 く 。 こ の よ う に し て makedepend は 、 通 常 は make の マ ク ロ の CFLAGS に 現 れ る よ う な 難 解 な コ ン パ イ ラ の 引 き 数 を う ま く 回 避 す る こ と が で き る (前 述 の の セ ク シ ョ ン を 参 照 )。 "−−" に 挟 ま れ て い て も 、 makedepend が 認 識 す る こ と が で き る オ プ シ ョ ン は 全 て 通 常 通 り 扱 わ れ る 。

ア ル ゴ リ ズ ム

こ の プ ロ グ ラ ム で 使 わ れ て い る 方 法 は 、 筆 者 が 知 っ て い る ど ん な 「 依 存 関 係 生 成 プ ロ グ ラ ム 」 よ り も 圧 倒 的 に 速 い 動 作 を 可 能 に し て い る 。 こ の 高 性 能 の ポ イ ン ト は 2つ の 仮 定 を 置 く こ と で あ る 。 第 一 点 は 、 同 じ makefile で コ ン パ イ ル さ れ る 全 て の フ ァ イ ル の ほ と ん ど に 対 し て は 、 同 じ −I オ プ シ ョ ン と −D オ プ シ ョ ン が 使 わ れ る こ と で あ る 。 第 二 点 は 同 じ デ ィ レ ク ト リ に あ る ほ と ん ど の フ ァ イ ル は 、 だ い た い 同 じ フ ァ イ ル を イ ン ク ル ー ド す る こ と で あ る 。 こ れ ら の 仮 定 を 与 え る と 、 makedepend が そ れ ぞ れ の makefile に 対 し て 1度 だ け 呼 ば れ 、 同 時 に こ の makefile が 管 理 す る 全 て の ソ ー ス フ ァ イ ル は makedepend を 呼 び 出 す 際 の コ マ ン ド 行 に 現 れ る こ と を 期 待 で き る 。 makedepend は ソ ー ス フ ァ イ ル と イ ン ク ル ー ド フ ァ イ ル を そ れ ぞ れ 1度 だ け 解 析 し 、 ソ ー ス フ ァ イ ル と イ ン ク ル ー ド フ ァ イ ル に 対 す る 内 部 シ ン ボ ル テ ー ブ ル を 1つ 管 理 す る 。 こ う す る と 、 コ マ ン ド 行 で の 最 初 の フ ァ イ ル の 解 析 に は 、 通 常 の C の プ リ プ ロ セ ッ サ の 処 理 時 間 に 比 例 す る 時 間 が か か る 。 し か し 、 そ れ 以 降 の フ ァ イ ル に つ い て は 、 一 度 解 析 し た イ ン ク ル ー ド フ ァ イ ル が 再 び 解 析 さ れ る こ と は な い 。 例 え ば 、 file1.cfile2.c, の 2つ の フ ァ イ ル を コ ン パ イ ル す る こ と を 考 え る 。 こ の 2つ の フ ァ イ ル は header.h を イ ン ク ル ー ド し 、 header.hdef1.hdef2.h を イ ン ク ル ー ド す る も の と す る 。 コ マ ン ド

makedepend file1.c file2.c を 実 行 し た と き 、 makedepend は 最 初 に file1.c を 解 析 し 、 次 に header.h を 解 析 し 、 そ れ か ら def1.hdef2.h を 解 析 す る 。 makedepend は 、 最 後 に こ の フ ァ イ ル に 関 す る 依 存 関 係 が

file1.o: header.h def1.h def2.h で あ る こ と を 決 定 す る 。 し か し 、 makedependfile2.c を 解 析 し 、 こ の フ ァ イ ル も header.h を イ ン ク ル ー ド す る こ と を 発 見 し た と き に は 、 こ の フ ァ イ ル の 解 析 は 行 わ れ な い 。 こ の 場 合 は 、 file2.o の 依 存 関 係 の リ ス ト に 対 し て header.h, def1.h, def2.h が 単 純 に 追 加 さ れ る 。

関 連 項 目

cc(1), make(1)

バ グ

makedepend は SVR4 の #predicate(token-list) と い う プ リ プ ロ セ ッ サ 式 の 解 析 は 行 う が 、 評 価 は 行 わ な い 。 こ の よ う な 式 は 単 純 に 真 と 仮 定 さ れ る 。 そ の た め 、 正 し く な い #include デ ィ レ ク テ ィ ブ が 評 価 さ れ る こ と が あ る 。

2つ の フ ァ イ ル file1.cfile2.c を 解 析 す る こ と を 考 え る 。 両 方 の フ ァ イ ル と も def.h を イ ン ク ル ー ド す る も の と す る 。 実 際 に は file1.c か ら イ ン ク ル ー ド さ れ た 場 合 と file2.c か ら イ ン ク ル ー ド さ れ た 場 合 で は 、 def.h が イ ン ク ル ー ド す る フ ァ イ ル の リ ス ト は 変 化 す る か も し れ な い 。 し か し 、 makedepend は 一 度 あ る フ ァ イ ル に 対 す る 依 存 関 係 を 見 つ け る と 、 こ れ を 固 定 の も の と し て 扱 う 。

著 者

Todd Brunhoff, Tektronix, Inc. and MIT Project Athena