これまではmakeが全てうまくいくという前提でMakefileを書いてきたわけだが、状況によってはそれ以上処理を進めることができないケースというのも出てくる。当然ながらそういった場合にはmakeを終了する必要があるのだが、exitではmakeの実行を終了することができない。今回はmakeを終了するための関数について取り上げる。
レシピにexitを書いてもmakeは終了しない
Linuxを使っているということは当然シェルを使っているわけで、処理を終了させるにはexitと入力すればよいことは誰しもが知っていることだ。しかし、Makefileのレシピ部分にexitと書いたとしても、makeの処理は終了することなく続いていく。
次のMakefileを見てみよう。
test:
@echo exit前
exit
@echo exit後
このMakefileに対して作者が期待するのは、exitの行でmakeの処理が止まることだ。しかし、実行すると実際には次のようになる。
% make
exit前
exit
exit後
%
exitが処理された後もmakeは処理を進めていることがわかる。
これまでの説明でmakeの仕組みを深く理解している場合、この動作は当然だということはわかるだろう。
makeは「@echo exit前」「exit」「@echo exit後」というレシピに対し、それぞれシェルを起動して「echo exit前」「exit」「echo exit後」という文字列を渡す。makeが行うのはここまでで、あとは引き受けたシェルが処理を行う。シェルが「exit」でシェルを終了させても、それは呼び出した側のmakeには影響しないのだ。
makeの動作を変更する関数error
こうした場合に使用する関数としてGNU makeにはerrorという関数が用意されている。この関数は現在主流のプログラミング言語が使用しているerror関数と似ている。エラーメッセージを出力するとともに、makeそのものを終了する。
仲間に分類される関数にwarning関数とinfo関数がある。この3つの関数はまとめて覚えておこう。シンタックスと処理内容をかんたんにまとめると次のようになる。
関数 | シンタックス |
---|---|
error | $(error テキスト) |
warning | $(warning テキスト) |
info | $(info テキスト) |
関数 | 内容 |
---|---|
error | 指定されたテキストの表示や式の評価を行ったのち、makeを終了する。 |
warning | 指定されたテキストの表示や式の評価を行う。 |
info | 指定されたテキストの表示や式の評価を行う。makefile名や行番号は追加されない。 |
makeを止めたいときはerror関数、情報の出力を行いたいだけならwarning関数やinfo関数といった使い分けになる。