のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

Makefileでスマート(if文を使用せず)に処理を分岐させる

はじめに

Makefileではifやwhileを使うことができるのだが、予めどんな値が入るかわからない場合においては使用できない。

今回の使用法は汎用性に富んでおり、かつ簡単にかけるのでそのやり方を紹介しておく。

Makefileのワイルドカード

Makefileではワイルドカードとして、*%等を使用することができる。

今回は詳細に説明しないが、%をターゲット名に使用することで、%の部分を自動変数に格納できることを利用する。

自動変数を用いてtarget名の一部を利用する

%に該当する部分は、自動変数:$*で利用できる。

早速簡単な例を見てみよう。

test-%:
   @echo $*
$ make test-hello
hello

$ make test-hogehoge
hogehoge

これで大体どう使えそうかほとんどわかると思うが、例えば無理くり呼び出す変数を変更させたりもできる。(この場合汎用性は当然下がる)

test-%:
   @echo $(var_$*)

var_hoge=$$(echo hoge)
var_huga=$$(echo huga)
$ make test-hoge
hoge
$ make test-huga
huga

おわりに

Makefileはビルドツールとして非常に優秀なので、サーバへのデプロイツールのラッパーとしての用途でも使用する場面が多いと思う。

Makefileについては以下の書籍があるが、実はこれはオライリーのサイトでPDF版が無料で配布されていたりする。私は本派だが…

GNU Make 第3版

GNU Make 第3版

  • 作者:Robert Mecklenburg
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2005/12/01
  • メディア: 大型本