Makefile の書き方(その2)

新人向けドキュメントの下書をメモ.

CPPFLAGS=-I/usr/local/include
LDLIBS=hogehoge.a

all:  sample

sample: sample.o sub.o
 

というMakefileと,二つのソースファイル

  • sample.c
  • sub.c

を用意し,

$ make all

を実行した場合の処理を順に説明する.

  • all: sample より all をつくるためには,sample を生成する必要がある.
  • sample: sample.o sub.o より sample を生成するためには sample.o と sub.o が必要
  • sample.c というソースがすでにあるため,暗黙の生成ルール %.o: %.c より sample.c から sample.o が生成される.すなわち,
$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH)  -o $@ -c $<

が展開され以下のコマンドが実行される

cc -I/usr/local/include -o sample.o  -c sample.c
  • 同様にsub.c から sub.o が生成される.
cc -I/usr/local/include -o sub.o  -c sub.c
  • sample: sample.o sub.o のソース側が完成したので,ターゲットが生成される.ここでも 暗黙の生成ルール %: %.o が適用され,
$(CC) $(LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@

が展開され,以下のコマンドが実行される.

cc sample.o sub.o  hogehoge.a  -o sample

このように 暗黙の生成規則(ルール)をうまく使うと 簡潔で効率のよいMakefileを記述することができる.

さらに詳しい内容として,以下のエントリを追加しました.あわせてどうぞ.

また書籍としては以下のものがオススメです.

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