makefile
makefileを整備したので公開する。要点は
- ソースやヘッダーだけでなく一時ファイルも専用ディレクトリに入れる。
- make cleanをしたら一時ファイルが全て消える。
- ソースだけでなくヘッダーが変更された場合にもそれに依存するオブジェクトファイルを更新する。
- make dependは面倒だから自動化する。
という感じ。
SUFFIX = .hpp .cpp .o CXX = g++ TARGET = a.out SRCDIR = source INCDIR = include DEPDIR = depend OBJDIR = object SOURCES = ${shell ls ${SRCDIR}/*.cpp} HEADERS = ${shell ls ${INCDIR}/*.hpp} DEPENDS = ${patsubst ${SRCDIR}/%.cpp, ${DEPDIR}/%.lo, ${SOURCES}} OBJECTS = ${patsubst ${SRCDIR}/%.cpp, ${OBJDIR}/%.o, ${SOURCES}} INCLUDE = -I${INCDIR} CFLAGS = -O0 -Wall -DDEBUG #CFLAGS = -O3 LIBRARY = all:${DEPENDS} make ${TARGET} #テストをここに書く。 clean: ${RM} ${TARGET} ${RM} -r ${OBJDIR} ${RM} -r ${DEPDIR} ${RM} ${shell find . -name "*~"} .PHONY: all clean ${TARGET}:${OBJECTS} ${CXX} ${CFLAGS} ${LIBRARY} -o ${TARGET} ${OBJECTS} ${OBJECTS}: ${OBJDIR}/%.o: ${SRCDIR}/%.cpp ${DEPDIR}/%.lo mkdir -p ${OBJDIR} ${CXX} ${CFLAGS} ${INCLUDE} -c -o $@ $< ${DEPDIR}/%.lo: ${SRCDIR}/%.cpp Makefile mkdir -p ${DEPDIR} ${CXX} ${INCLUDE} -MM $< | sed -e 's/\(.*\)\.o/${DEPDIR}\/\1.lo/g' > $@ include .empty ${shell find . -name "*.lo"}