Shammer's Philosophy

My private adversaria

Makefile デビュー

初めて書いてみました。

# Makefile
CC=gcc
CFLAG=-g

all: clean build

clean:
	-rm *.o

build: hello.o
	$(CC) -o hello hello.c

ポイントは以下。

  • 最初に書かれたアクションが実行される(上の例ではall)
  • ハイフンを付けたアクションは、エラーになっても無視してくれる
  • オブジェクトファイルのタイムスタンプでビルド対象が決まる(ようである)

たとえば、ヘッダーファイルを更新していても、オブジェクトファイルが更新されていない限りはヘッダーファイルはビルド対象にならなかった。毎回確実にビルドするには、上記のようにオブジェクトファイルを毎回削除するようにするとよい。だが、削除するだけでは、オブジェクトファイルがない状態で実行すると削除対象ファイルなしでビルドまで処理がいかない。こういう時に備え、rm にはハイフンを付与し、削除対象ファイルがない場合もビルドされるようにしてみた。今後は、これをベースにアクションを追記していけばいいだろう。