项目领导要求比较高,全部是手写makefile,没有借助autotools或者cmake之类,不过却形成了一个可以复用的定义模板:
ifdef release
DIR = .
LIB_DIR = ${DIR}/../../../lib/fep
DEPS = -lplatform -lappconf -lconfig -ltinyxml -lkhreadline
CFLAGS = -O2 -fPIC -rdynamic -Wall
LDFLAGS = -fPIC -m64 -lreadline -lncurses -Wall
else
DIR = $(shell pwd)
LIB_DIR =
DEPS = ${LIB_DIR}/libplatform.so
CFLAGS = -O2 -fPIC -rdynamic -pg -Wall
LDFLAGS = -fPIC -m64 -lreadline -lncurses -pg -Wall
endif
OBJ_DIR =
BIN_DIR =
CC = g++
LDLIBS = -shared
TARGETS = ${BIN_DIR}/fepconfig
LDTARGETS = ${LIB_DIR}/libconfig.so
BINOBJS =
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 \
-Itinyxml
APPCONF = ${LIB_DIR}/libappconf.so
TINYXML = ${LIB_DIR}/libtinyxml.so
.PHONY:all clean
all:${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)