http://www.unixuser.org/~euske/doc/makefile/
* 生成規則
target: src
<TAB>commands ..
コマンドの先頭はタブ、というのが曲者.あとコマンドの先頭に@をつけると、コマンド実行内容を表示しなくなる。
特別な生成規則としてサフィックスルールというのがある。targetに".c.o"となどと書くと.c → .oを生成する規則になる。サフィックスとは拡張子のこと。makeが知らないサフィックスをサフィックスであるとするには
.SUFFIXES: .tex .dvi .ps .java .class # 新たに追加するサフィックス
のように書く。
*マクロの展開
${XX} or $(XX): マクロXXを展開。XXは冒頭または、make CC=gccのようにコマンドラインでも与えられる。
$@ :生成しようとするターゲット名
$< :srcの1つ1つのファイル名に展開。サフィックスルールで使う。
$* :ターゲット名からサフィックスを取り除いたもの
$? :依存関係で、ターゲットよりも新しいsrc。(ターゲットの更新要因ファイル)
$(OBJS:.o=.c) → sub1.c sub2.c sub3.c
$(マクロ名/*/文字列1&文字列2):文字列1と文字列2を展開結果の前後についか
$(マクロ名/^/文字列):文字列を先頭に追加
$(マクロ名/$/文字列) :文字列を末尾に追加する
$(マクロ名?文字列1:文字列2): 条件分岐マクロ。 指定したマクロがすでに定義されていれば文字列1 を、 未定義ならば文字列 2 を展開する。
#このページは私のメモなので,もし全般的に見たいなら下記が良い
Linuxを使っているならGNU版make
UNIX系共通の仕様を見るなら下記