CXX ?= clang++ SRCDIR ?= src INCDIR += -I${SRCDIR} OBJDIR ?= build/obj BINDIR ?= build/bin LIBDIR ?= build/lib BINCDIR ?= build/include INSTALLDIR ?= /usr/local/ TARGET ?= amalgam CFLAGS += -std=c++11 #CFLAGS += `pkg-config --cflags portaudio-2.0` #LDFLAGS += `pkg-config --libs portaudio-2.0` UNAME=$(shell uname -s) ifeq (${UNAME},FreeBSD) INCDIR += -I/sys/ endif SHELL=/bin/sh SRC = $(wildcard ${SRCDIR}/*/*.cpp) OBJ = ${SRC:${SRCDIR}/%.cpp=${OBJDIR}/%.o} BINS = $(wildcard ${SRCDIR}/*.cpp) ALLOBJ = ${SRC:${SRCDIR}/%.cpp=${OBJDIR}/%.o} ${BINS:${SRCDIR}/%.cpp=${OBJDIR}/%.o} INCLUDES = ${wildcard ${SRCDIR}/*/*.h} INC = ${INCLUDES:${SRCDIR}/%.h=${BINCDIR}/%.h} all: fmtest wavtest amalgam ${ALLOBJ}: $(OBJDIR)/%.o : $(SRCDIR)/%.cpp @mkdir -p $(dir $@) @echo CXX $< ${CXX} -o $@ ${INCDIR} -c ${CFLAGS} ${DEFINES} $< fmtest: ${ALLOBJ} @mkdir -p ${BINDIR} ${CXX} ${INCDIR} -o ${BINDIR}/fmtest ${OBJDIR}/fmtest.o ${OBJ} ${LDFLAGS} ${CFLAGS} ${DEFINES} wavtest: ${ALLOBJ} @mkdir -p ${BINDIR} ${CXX} ${INCDIR} -o ${BINDIR}/wavtest ${OBJDIR}/wavtest.o ${OBJ} ${LDFLAGS} ${CFLAGS} ${DEFINES} libamalgam.so: ${OBJ} ${INC} @mkdir -p ${LIBDIR} ${CXX} ${INCDIR} -o ${LIBDIR}/lib${TARGET}.so ${OBJ} --shared -fPIC ${LDFLAGS} ${CFLAGS} ${DEFINES} libamalgam.dylib: ${OBJ} ${INC} @mkdir -p ${LIBDIR} ${CXX} ${INCDIR} -o ${LIBDIR}/lib${TARGET}.dylib ${OBJ} -dynamiclib ${LDFLAGS} ${CFLAGS} ${DEFINES} ifeq (${UNAME},Darwin) amalgam: libamalgam.dylib else amalgam: libamalgam.so endif ${INC}: $(BINCDIR)/%.h : $(SRCDIR)/%.h @mkdir -p $(dir $@) cp $< $@ clean: @echo cleaning @rm -f build/ remove: clean @echo deleting binary @rm -f ${BINDIR}/${TARGET} @rm -r ${BINDIR} install: ${TARGET} mkdir -p ${INSTALLDIR} cp -a ${BINCDIR} ${INSTALLDIR} cp -a ${BINDIR} ${INSTALLDIR} cp -a ${LIBDIR} ${INSTALLDIR}