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の方を使わなければならないということなのだろう。とりあえず、違いがあるということは覚えておこうと思う。
0 件のコメント:
コメントを投稿