Makefileで既にそのtargetが存在しているかで分岐する
Makefileの中で、共通部分を取り出して汎用化し外出しにすることがよくあります。
外出しの部分を Makefile.inc に書いて、いろいろな Makefile をincludeするわけです。
このやりかたは便利なのですが最近1つ困っていました。
以下のようにMakefile.incで higepon target が定義されていて
Makefile.inc
higepon: @echo "higepon include"
Makefile
Makefileで Makefile.inc を include しています。
そして higepon target の動作を意図的に上書きしています。
include Makefile.inc higepon : @echo "higepon"
実行結果
nobita% make higepon Makefile:4: 警告: ターゲット `higepon' へのコマンドを置き換えます Makefile.include:6: 警告: ターゲット `higepon' への古いコマンドは無視されます higepon
このとおり、一応意図どおりの "higepon" という出力が得られるのですが、毎回警告が出てうざいです。
特に Emacs の M-x compile を使っているので1つの警告でもかなり邪魔なのです。
意図的に上書きしているのに警告はいらないよ!
この問題点を解決するための方法を名無しさんに教えていただきました。
Makefileの記述 - 別のMakefileを部分的に無効にするという方法を利用します。
詳細は見てもらうとして以下のように書きます。
Makefile.inc
%を使います。
0文字マッチングが出来ない(?)みたいなので %igepon みたいな感じになっています。
%igepon: force @echo "higepon include" force: ;
Makefile
先ほどと同じ。