レポートに使うプログラムのための Makefile 晒し

下に示すは j8-1-3, j8-2-3 というプログラムをつくるための Makefile。普通書くだろう

$(CC) $(CFLAGS) $^ -o $@

とかはめんどくさいので省略して、Make さん任せです。hoge.c から hoge.o を作る方法とかも書いてません。
プログラム名が意味不明な数字っぽいけれど、J8 実験の課題 1.3, 課題 2.3 で求められているプログラムであるので実はそのまんま。昔はレポート用のプログラムでもプログラムの挙動から名前つけるようにしてたけど、実際レポート用プログラムなんて、レポート仕上げたらもう二度と使うことの無いだろう書き捨てプログラムなので、下手に名前つけるよりレポート内での番号つけることにした。
一応工夫(?)しているのは、レポートにはっつけるための番号付きソースファイルをまとめて作れるようにしてることか。 make num で。
gcc -MM はいつぞや[オープンソース] Makefileを公開しよう - Higepon’s blog読んで以来便利に使ってます。

CFLAGS = -g -Wall
LDFLAGS = -lm
TARGET  = j8-1-3 j8-2-3
CSOURCES = j8-1-3.c matrix.c power_method.c jacobi.c
HEADERS = matrix.h power_method.h jacobi.h
SOURCES = $(CSOURCES) $(HEADERS)
OBJS  = $(SOURCES:.c=.o)
NUMBERED = $(CSOURCES:.c=.nc) $(HEADERS:.h=.nh)

.SUFFIXES: .o .c .nc .h .nh

all: deps $(TARGET)

num: $(NUMBERED)

j8-1-3: j8-1-3.o power_method.o matrix.o

j8-2-3: j8-2-3.o matrix.o jacobi.o

test: j8-1-3 j8-2-3
  ./j8-1-3
  ./j8-2-3

.c.nc:
  cat -n $< >numbered/$@

.h.nh:
  cat -n $< >numbered/$@

clean:
  rm -rf *.o $(TARGET)

remake: clean all

deps: $(CSOURCES)
  $(CC) -MM $(CSOURCES) >deps

include deps

たぶん使ってない人の方が多いだろうけど、色々楽になるから Makefile おすすめ。gcc -g -Wall -DHOGEHOGE -lm hoge.c fuga.c moge.c とか何度も打つのめんどい。

test