すこし汎用的な Makefile

比較的簡単なプロジェクト用に Makefile のテンプレートを作った。

ソースファイルとオブジェクトファイルのディレクトリを分けたところが、少し工夫したところ。

とはいえ、昔は階層化 Make まで頑張って対応していたので、あくまで簡易版。

# Directories
SRCDIR = ./sources
OBJDIR = ./objs

TARGET =
SRCS = $(wildcard ${SRCDIR}/*.cpp)
OBJS = $(addprefix ${OBJDIR}/, $(notdir $(SRCS:.cpp=.o)))
DEPS = $(addprefix ${OBJDIR}/, $(notdir $(SRCS:.cpp=.d)))

# for preprocesser
INCLUDES =
CPPFLAGS =

# for C++ compiler
CXX = g++
CXXFLAGS = -g -Wall -MMD -MP

# for linker
LD = ${CXX}
LIBDIRS =
LIBS =
LDFLAGS = ${LIBDIRS} ${LIBS}

all: clean ${TARGET}

${TARGET}: ${OBJS}
${LD} -o $@ $^ ${LDFLAGS}

${OBJDIR}/%.o: ${SRCDIR}/%.cpp
@[ -d ${OBJDIR} ]
${CXX} ${CXXFLAGS} -o $@ -c $<

.PHONY: all clean

clean:
${RM} ${TARGET} ${OBJS} ${DEPS}

-include ${DEPS}