C/C++ 用の Makefile で楽をする方法

OCaml なら OCamlMakefile、Java なら Eclipse でいいんですが、C++ になったとたん autotools を試すもエラーに泣かされてあきらめて Makefile を手書きする軟弱モノです。なんであんなに使いにくいのよ!

最近になって -MM を知りました。こんなのしらなかったよ、ゴメンナサイ。

SRCS = hoge.cc fuga.cc foo.cc
OBJS = $(SRCS:%.cc=%.o)

.SUFFIXES:
.SUFFIXES: .cc .o .d

hoge: $(OBJS)
    $(CXX) $(CXXFLAGS) -o $@ $^

.cc.d:
    $(CXX) -MM $^ > $@

.cc.o:
    $(CXX) $(CXXFLAGS) -c $<

-include $(SRCS:%.cc=%.d)

色づけできるようになったのね、はてな。-MM は include を追って Makefile 用の dependency を出力するオプションです。一度 .d に吐いてから .o を生成します。こういうオプション、OSS 界隈の人とかにとっては何を今更って感じなんだろうなぁ。