LIBGL := -lGL -lGLU LIBSDL := `sdl-config --libs` LIBS := ${LIBSDL} ${LIBGL} OPTFLAGS := -O2 DBGFLAGS := -ggdb PRFFLAGS := ${DBGFLAGS} -pg MYFLAGS := -Wall -pedantic -ansi CXXFLAGS := ${MYFLAGS} ${DBGFLAGS} VALFLAGS := --leak-check=full CXX := g++ SRCS := # := start DIRS := # := start DIRS += . DIRS += Entities DIRS += GameStates DIRS += Effects DIRS += config DIRS += input DIRS += graphics include $(addsuffix /files.mk,${DIRS}) OBJSDIR := ../objs/ OBJS := ${SRCS:.cpp=.o} OBJS := $(addprefix ${OBJSDIR},${OBJS}) DEPSDIR := ../deps/ DEPS := ${SRCS:.cpp=.d} DEPS := $(addprefix ${DEPSDIR},${DEPS}) WORKINGDIR := ../bin/ TARGETNAME := run_physics TARGETTMP := ${OBJSDIR}${TARGETNAME} TARGET := ${WORKINGDIR}${TARGETNAME} BLDDIRS := $(addprefix ${DEPSDIR},${DIRS}) $(addprefix ${OBJSDIR},${DIRS}) ${WORKINGDIR} VERBOSE := 0 ifeq (${VERBOSE},0) # quiet the echo command Q1 := @ # quiet the command that is `replaced' by an echo Q2 := @ else # EAT the echo command as if it was not there Q1 := @true # NOTE: the space between @true and the # is VERY important!! # do not quiet the command output Q2 := endif .PHONY: all all: ${TARGET} # rule to copy tmp target to working directory ${TARGET}: ${TARGETTMP} ${Q1}echo "cp: $@" ${Q2}cp $^ $@ # how to link the main target ${TARGETTMP}: ${OBJS} ${Q1}echo "${CXX}: $@" ${Q2}${CXX} ${CXXFLAGS} -o $@ $^ ${LIBS} # how to make a directory ${BLDDIRS}: ${Q2}mkdir -p $@ # rule to make a depend file from a .cpp ${DEPSDIR}%.d: %.cpp | ${BLDDIRS} ${Q1}echo "DEP: $@" ${Q2}${CXX} -MM ${CXXFLAGS} $< | sed 's,\(^.*\):,${OBJSDIR}\1 $@:,' > $@ # rule to make an object file from a .cpp ${OBJSDIR}%.o: %.cpp | ${BLDDIRS} ${Q1}echo "${CXX}: $@" ${Q2}${CXX} ${CXXFLAGS} -c -o $@ $< tags: ${SRCS} ${Q1}echo "ctags: $@" ${Q2}ctags $^ .PHONY: clean clean: ${Q1}echo "CLEAN: OBJS" ${Q2}rm -f ${OBJS} ${Q1}echo "CLEAN: TARGET" ${Q2}rm -f ${TARGET} .PHONY: distclean distclean: clean ${Q1}echo "CLEAN: DEPS" ${Q2}rm -f ${DEPS} ${Q1}echo "CLEAN: tags prof gmon.out" ${Q2}rm -f tags prof gmon.out .PHONY: gitclean gitclean: ${Q1}echo "git-clean: show, use gitcleanf to force" ${Q2}cd ..; git clean -nxd .PHONY: gitcleanf gitcleanf: ${Q1}echo "git-clean: forced" ${Q2}cd ..; git clean -fxd .PHONY: tar tar: ../physics.tar.bz2 .PHONY: ../physics.tar.bz2 ../physics.tar.bz2: @echo "git-archive: Warning, archives HEAD not current" ${Q1}echo "git-archive: ../physics.tar.bz2" ${Q2}cd ..; git-archive --prefix=physics/ HEAD | bzip2 > physics.tar.bz2 .PHONY: run run: all cd ${WORKINGDIR}; ./${TARGETNAME} .PHONY: gdb gdb: all cd ${WORKINGDIR}; gdb ${TARGETNAME} .PHONY: cgdb cgdb: all cd ${WORKINGDIR}; cgdb ${TARGETNAME} .PHONY: val val: all cd ${WORKINGDIR}; valgrind ${VALFLAGS} ./${TARGETNAME} .PHONY: prof prof: run cd ${WORKINGDIR}; gprof -b ${TARGETNAME} > src/prof kprof -f prof MINGMAKEARGS := "LIBGL := -lopengl32 -lglu32" \ "LIBSDL := `/usr/mingw32/bin/sdl-config --libs`" \ "CXXFLAGS := ${OPTFLAGS}" \ "CXX := mingw32-g++" \ "OBJSDIR := ../objs-mingw32/" \ "WORKINGDIR := ../bin-mingw32" \ "TARGETNAME := run_physics.exe" .PHONY: mingw32 mingw32: ${Q1}echo "make: mingw32" ${Q2}${MAKE} ${MINGMAKEARGS} clean all -include ${DEPS}