項目領導要求比較高,全部是手寫makefile,沒有藉助autotools或者cmake之類,不過卻形成了一個可以複用的定義模板:
ifdef releaseDIR = .LIB_DIR = ${DIR}/../../../lib/fepDEPS = -lplatform -lappconf -lconfig -ltinyxml -lkhreadlineCFLAGS = -O2 -fPIC -rdynamic -WallLDFLAGS = -fPIC -m64 -lreadline -lncurses -WallelseDIR = $(shell pwd)LIB_DIR = DEPS = ${LIB_DIR}/libplatform.soCFLAGS = -O2 -fPIC -rdynamic -pg -WallLDFLAGS = -fPIC -m64 -lreadline -lncurses -pg -WallendifOBJ_DIR = BIN_DIR = CC = g++LDLIBS = -sharedTARGETS = ${BIN_DIR}/fepconfigLDTARGETS = ${LIB_DIR}/libconfig.soBINOBJS = OBJECTS = $(patsubst cpp/%.cpp,${OBJ_DIR}/%.o,$(wildcard cpp/*.cpp))SOURCES = $(wildcard cpp/*.cpp)TARG_OBJS = $(patsubst %.cpp,${OBJ_DIR}/%.o,$(wildcard *.cpp))VPATH = .:${DIR}/../platform:${OBJ_DIR}:${LIB_DIR}INCLUDES = -I${DIR}/../platform/include \ -I${DIR}/../platform/readline \ -Iappconf/include \ -I./include \ -I../protocol/include \ -ItinyxmlAPPCONF = ${LIB_DIR}/libappconf.soTINYXML = ${LIB_DIR}/libtinyxml.so.PHONY:all cleanall:${APPCONF} ${TINYXML} ${LDTARGETS} ${TARGETS}@echo y | cp -r template/*.{conf,xml} ../../../conf/fep/${TARGETS}:${TARG_OBJS}${CC} ${LDFLAGS} $^ ${INCLUDES} -L${LIB_DIR} ${DEPS} -o $@${TARG_OBJS}:${OBJ_DIR}/%.o:%.cpp${CC} ${CFLAGS} {1}lt; ${INCLUDES} -c -o $@${LDTARGETS}:${OBJECTS}${CC} ${LDLIBS} $^ -o $@${APPCONF}:(cd appconf;make)${TINYXML}:(cd tinyxml;make)${OBJECTS}:${OBJ_DIR}/%.o:cpp/%.cpp${CC} ${CFLAGS} {1}lt; ${INCLUDES} -c -o $@clean:-rm -f ${TARGETS} ${LDTARGETS} ${OBJECTS}(cd appconf;make clean)(cd tinyxml;make clean)