diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..0ae20951aefe1be6ed3cf213a922f0db4ac076ee
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,34 @@
+CC=gcc
+CXX=g++
+MPICC=mpicc
+
+INCLUDE_DIR=./include
+SRC_DIR=./src
+OBJ_DIR=./obj
+TEST_DIR=./test
+OUT_DIR=./out
+
+PLUGIN_NAME=mpicoll_check
+PLUGIN_FLAGS=-I`$(CC) -print-file-name=plugin`/include -I./$() -g -Wall -fno-rtti -shared -fPIC
+PLUGIN_OBJ=$(OBJ_DIR)/$(PLUGIN_NAME).so
+
+FLAGS=-Wall -Wextra -fplugin=./$(PLUGIN_OBJ)
+
+all:
+	mkdir -p $(OBJ_DIR)
+	$(PLUGIN_OBJ)
+
+$(PLUGIN_OBJ): $(SRC_DIR)/plugin.cpp
+	$(CXX) -I`$(CC) -print-file-name=plugin`/include -g -Wall -fno-rtti -shared -fPIC -o $@ $<
+
+test: $(PLUGIN_OBJ) $(patsubst $(TEST_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(wildcard $(TEST_DIR)/*.cpp))
+
+$(OBJ_DIR)/%.o: $(TEST_DIR)/%.cpp
+	$(MPICC) -c $< $(FLAGS)
+
+$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
+	$(CXX) -c $< $(PLUGIN_FLAGS)
+
+clean:
+	rm -rf $(OBJ_DIR)
+	rm -rf $(OUT_DIR) 
\ No newline at end of file