Makefile は簡潔に書きましょう

仕組みが判ってしまえば Makefile は簡潔に書けます.$(CC) とか $@ とか $< なんて変数は使ったら負けです.

基本(その1)

ソースコード hoge.c から 実行形式のバイナリ hoge を生成するMakefileは,以下のように書きましょう

all: hoge

これだけです.これで

 $ make all

とすると hoge が生成されます

重要な点は,間違っても

all: hoge
hoge: hoge.c
    $(CC) hoge.c -o hoge

のようなMakefileを書かないことです.このようなMakefileでは

#!/bin/sh
CC=gcc
$CC  hoge.c -o hoge

というようなシェルスクリプトと同程度の使い勝手しかありません.

基本(その2)

ここで例えば-O3 を付けてコンパイルしたい場合や,-lm を付けてリンクしたい場合は以下のようにします.

CFLAGS += -O3
LDFLAGS += -lm
all: hoge

基本(その3)

ソースコードhoge.c と fuga.c に分割している場合,つまり

場合は Makefile は以下のようになります

all: hoge
hoge: hoge.o fuga.o

基本(その4)

一時的に -Wall を付けてコンパイルしたい場合などは, Makefile を書き換えずに

 $ make CFLAGS=-Wall

とすることも出来ます.同様にたとえばコンパイラgcc から gcc-3.1 に替えたい時も

 $ make CC=gcc-3.1

と出来ます.

毎回引数を与えるのが面倒な場合は,環境変数で設定することも出来ます.

 $ export CC=gcc-3.1
 $ make

なぜこのような簡潔なmakefileで ビルドできるのか?それを理解するためには make の動作原理を理解する必要があります.動作原理については次のアーティクルをご覧下さいhttp://d.hatena.ne.jp/pyopyopyo/20070218/p2

また以下の本を読むこともおすすめします.

GNU Make
GNU Make
posted with amazlet at 09.01.10
ロバート メクレンバーグ
オライリージャパン
売り上げランキング: 91882
おすすめ度の平均: 5.0
5 どのファイルをコンパイルするかを指定する道具

make 改訂版
make 改訂版
posted with amazlet at 09.01.10
アンドリュー オラム スティーブ タルボット
オライリー・ジャパン
売り上げランキング: 130044
おすすめ度の平均: 4.5
5 プログラマーのお友達Make
4 makeファイルを独学で学んできた人にもお勧め