CXX = g++
INC_DIR = include
OBJ_DIR = object
SRC_DIR = src
EXE_DIR = bin
CFLAGS  = -O3 -ffast-math -std=c++98 -pedantic -pthread
TEST_FILE = $(EXE_DIR)/SumNums
TARGET = $(EXE_DIR)/SumNums
MKDIR_P = mkdir -p

SRC = $(SRC_DIR)/ThreadPool_pthread.cpp $(SRC_DIR)/LockGuard_pthread.cpp examples/sumnums.cpp
OBJ = $(OBJ_DIR)/ThreadPool_pthread.o   $(OBJ_DIR)/LockGuard_pthread.o $(OBJ_DIR)/sumnums.o
DEP = $(INC_DIR)/ThreadPool_pthread.h $(INC_DIR)/LockGuard_pthread.h

all: $(TARGET)

$(OBJ): $(SRC) $(DEP)
	$(MKDIR_P) $(@D)
	$(CXX) $(CFLAGS) -I$(INC_DIR) -c $< -o $@

$(TARGET): $(OBJ) $(DEP)
	$(MKDIR_P) $(@D)
	$(CXX) $(CFLAGS) -o $@ $(SRC) -I$(INC_DIR)

clean:
	$(RM) $(OBJ_DIR)/*.o $(TARGET) $(TEST_FILE)