CPC_SRCDIR := cpc/src CPC_INCDIR := cpc/include CPC_BUILDDIR := build/cpc CPC_TSTDIR := cpc/test CPC_TSTBUILD := cpc/build CPC_TEST_BIN := cpc_test CPC_TARGET := cpc/$(CPC_TEST_BIN) CPC_CSOURCES := $(shell find $(CPC_SRCDIR) -type f -name "*.c") CPC_CPPSOURCES := $(shell find $(CPC_SRCDIR) -type f -name "*.cpp") CPC_SOURCES := $(CPC_CSOURCES) $(CPC_CPPSOURCES) CPC_OBJECTS := $(patsubst $(CPC_SRCDIR)/%,$(CPC_BUILDDIR)/%,$(CPC_CSOURCES:.c=.o) $(CPC_CPPSOURCES:.cpp=.o)) CPC_TSTSOURCES := $(shell find $(CPC_TSTDIR) -type f -name "*.cpp") CPC_TSTOBJS := $(patsubst $(CPC_TSTDIR)/%,$(CPC_TSTBUILD)/%,$(CPC_TSTSOURCES:.cpp=.o)) CPC_INCLIST := $(COM_INCLIST) $(patsubst $(CPC_SRCDIR)/%,-I $(CPC_SRCDIR)/%,$(CPC_INCDIR)) CPC_INCLIST := $(COM_INCLIST) -I $(CPC_INCDIR) CPC_BUILDLIST := $(patsubst src/%,$(CPC_BUILDDIR)/%,$(CPC_INCDIR)) cpc: $(CPC_OBJECTS) $(CPC_BUILDDIR)/%.o: $(CPC_SRCDIR)/%.cpp @mkdir -p $(CPC_BUILDDIR) @echo "Compiling $<..."; @$(CC) $(CPPFLAGS) $(INC) $(CPC_INCLIST) -c -o $@ $< $(CPC_BUILDDIR)/%.o: $(CPC_SRCDIR)/%.c @mkdir -p $(CPC_BUILDDIR) @echo "Compiling $<..."; @$(CC) $(CFLAGS) $(INC) $(CPC_INCLIST) -c -o $@ $< $(CPC_TSTBUILD)/%.o: $(CPC_TSTDIR)/%.cpp @mkdir -p $(CPC_TSTBUILD) @echo "Compiling $<..."; @$(CC) $(CPPFLAGS) $(INC) $(CPC_INCLIST) -c -o $@ $< .PHONY: cpc_test cpc_clean cpc_exec: $(COM_TSTOBJS) $(CPC_OBJECTS) $(CPC_TSTOBJS) @echo "Linking $(CPC_TARGET)..." @$(CC) $^ -o $(CPC_TARGET) $(TSTLNKFLAGS) $(LIB) cpc_test: $(LIBRARY) cpc_exec @cd cpc; DYLD_LIBRARY_PATH=../$(TARGETDIR) ./$(CPC_TEST_BIN) cpc_clean: @echo "Cleaning cpc..."; @$(RM) -r $(CPC_BUILDDIR) $(CPC_TSTBUILD) $(CPC_TARGET)