これまでは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関数といった使い分けになる。

error関数、warning関数、info関数を使ってみる

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら