2007年4月15日日曜日

make if関数

 makeのマニュアルとしてはGNU make 日本語訳(Coop編)をいつも使っているのだが、Linux2.6のカーネルのmakeファイルを覗いていたらそこに書いていない構文があった。

KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd) $(if $(KBUILD_OUTPUT),, \       $(error output directory "$(saved-output)" does not exist))

 2行目の$(if ~, ~,)が書いていなかった。上記の日本語訳は1998年5月のGNU Make Version 3.77のものでかなり古いので、英語の方のマニュアルを見てみた。構文は下記のようになって特に難しいことはない。

$(if condition,then-part[,else-part])

 makeにはもうひとつifeq構文もあって(ifeqは3.77のマニュアルにも書いてある)、そっちはmakefile conditionalsを、一方ifは functional contextを判定するものという違いがあるということらしい。この記述だけだとよくわからないが、実行してみないとわからないもの(先のカーネルでは、shellでの実行結果)は、ifの方を使わなければならないということなのだろう。とりあえず、違いがあるということは覚えておこうと思う。

■ 参考資料

GNU `make' Manual(英語)
GNU make 日本語訳(Coop編)

0 件のコメント: