CXX ?= clang++ SRCDIR ?= src INCDIR += -I${SRCDIR} OBJDIR ?= build BINDIR ?= bin LIBDIR ?= lib INSTALLDIR ?= /usr/local/bin 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=${LIBDIR}/include/%.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} ${CXX} ${INCDIR} -o ${LIBDIR}/lib${TARGET}.so ${OBJ} --shared -fPIC ${LDFLAGS} ${CFLAGS} ${DEFINES} libamalgam.dylib: ${OBJ} ${INC} ${CXX} ${INCDIR} -o ${LIBDIR}/lib${TARGET}.dylib ${OBJ} -dynamiclib ${LDFLAGS} ${CFLAGS} ${DEFINES} ifeq (${UNAME},Darwin) amalgam: libamalgam.dylib else amalgam: libamalgam.so endif ${INC}: $(LIBDIR)/include/%.h : $(SRCDIR)/%.h @mkdir -p $(dir $@) cp $< $@ clean: @echo cleaning @rm -f ${OBJ} remove: clean @echo deleting binary @rm -f ${BINDIR}/${TARGET} @rm -r ${BINDIR} install: ${TARGET} mkdir -p ${INSTALLDIR} cp ${BINDIR}/${TARGET} ${INSTALLDIR}/${TARGET} chmod 4555 ${INSTALLDIR}/${TARGET}