diff --git a/Makefile b/Makefile
index 2986692ec7052ac5da30c1455fbd9fdb42fafb53..c3f68920677cff8dbfca1118a099ba0d1d47b8ad 100644
--- a/Makefile
+++ b/Makefile
@@ -49,8 +49,11 @@ SYSTEM = MINGW32
 endif
 
 
+MAKEFILE_PATH = $(abspath $(lastword $(MAKEFILE_LIST)))
 ifndef BUILDDIR
-BUILDDIR = .
+BUILDDIR_ABSOLUTE = $(patsubst %/,%,$(dir $(MAKEFILE_PATH)))
+else
+BUILDDIR_ABSOLUTE = $(abspath $(BUILDDIR))
 endif
 
 HAS_GCC = $(shell which gcc > /dev/null 2> /dev/null && echo true || echo false)
@@ -76,10 +79,10 @@ endif
 endif
 
 
-BINDIR = $(BUILDDIR)/bins
-OBJDIR = $(BUILDDIR)/objs
-LIBDIR = $(BUILDDIR)/libs
-GENDIR = $(BUILDDIR)/gens
+BINDIR = $(BUILDDIR_ABSOLUTE)/bins
+OBJDIR = $(BUILDDIR_ABSOLUTE)/objs
+LIBDIR = $(BUILDDIR_ABSOLUTE)/libs
+GENDIR = $(BUILDDIR_ABSOLUTE)/gens
 
 # Configurations
 
@@ -4189,13 +4192,13 @@ $(LIBDIR)/$(CONFIG)/libgrpc.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(LIBGRPC_OBJS)
 	$(Q) mkdir -p `dirname $@`
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBGRPC_OBJS)
-	$(Q) rm -rf tmp-merge-grpc
-	$(Q) mkdir tmp-merge-grpc
-	$(Q) ( cd tmp-merge-grpc ; $(AR) x ../$(LIBDIR)/$(CONFIG)/libgrpc.a )
-	$(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( cd tmp-merge-grpc ; ar x ../$${l} ) ; done
-	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a tmp-merge-grpc/__.SYMDEF*
-	$(Q) ar rcs $(LIBDIR)/$(CONFIG)/libgrpc.a tmp-merge-grpc/*
-	$(Q) rm -rf tmp-merge-grpc
+	$(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc
+	$(Q) mkdir $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc
+	$(Q) ( cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc ; $(AR) x $(LIBDIR)/$(CONFIG)/libgrpc.a )
+	$(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( cd $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc ; ar x $${l} ) ; done
+	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/__.SYMDEF*
+	$(Q) ar rcs $(LIBDIR)/$(CONFIG)/libgrpc.a $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc/*
+	$(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-grpc
 ifeq ($(SYSTEM),Darwin)
 	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc.a
 endif
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 6069d6d23824d004cf8939f36942e9a3514e71d9..49c2f8b7f5ac187d476f083d935b1ed7113ed9f9 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -65,8 +65,11 @@
   endif
 
 
+  MAKEFILE_PATH = $(abspath $(lastword $(MAKEFILE_LIST)))
   ifndef BUILDDIR
-  BUILDDIR = .
+  BUILDDIR_ABSOLUTE = $(patsubst %/,%,$(dir $(MAKEFILE_PATH)))
+  else
+  BUILDDIR_ABSOLUTE = $(abspath $(BUILDDIR))
   endif
 
   HAS_GCC = $(shell which gcc > /dev/null 2> /dev/null && echo true || echo false)
@@ -92,10 +95,10 @@
   endif
 
 
-  BINDIR = $(BUILDDIR)/bins
-  OBJDIR = $(BUILDDIR)/objs
-  LIBDIR = $(BUILDDIR)/libs
-  GENDIR = $(BUILDDIR)/gens
+  BINDIR = $(BUILDDIR_ABSOLUTE)/bins
+  OBJDIR = $(BUILDDIR_ABSOLUTE)/objs
+  LIBDIR = $(BUILDDIR_ABSOLUTE)/libs
+  GENDIR = $(BUILDDIR_ABSOLUTE)/gens
 
   # Configurations
 
@@ -1599,13 +1602,13 @@
   	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(LIB${lib.name.upper()}_OBJS)
   % if lib.get('baselib', False):
   % if lib.get('secure', 'check') == True:
-  	$(Q) rm -rf tmp-merge-${lib.name}
-  	$(Q) mkdir tmp-merge-${lib.name}
-  	$(Q) ( cd tmp-merge-${lib.name} ; $(AR) x ../$(LIBDIR)/$(CONFIG)/lib${lib.name}.a )
-  	$(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( cd tmp-merge-${lib.name} ; <%text>ar x ../$${l}</%text> ) ; done
-  	$(Q) rm -f $(LIBDIR)/$(CONFIG)/lib${lib.name}.a tmp-merge-${lib.name}/__.SYMDEF*
-  	$(Q) ar rcs $(LIBDIR)/$(CONFIG)/lib${lib.name}.a tmp-merge-${lib.name}/*
-  	$(Q) rm -rf tmp-merge-${lib.name}
+  	$(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}
+  	$(Q) mkdir $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}
+  	$(Q) ( cd $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name} ; $(AR) x $(LIBDIR)/$(CONFIG)/lib${lib.name}.a )
+  	$(Q) for l in $(OPENSSL_MERGE_LIBS) ; do ( cd $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name} ; <%text>ar x $${l}</%text> ) ; done
+  	$(Q) rm -f $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/__.SYMDEF*
+  	$(Q) ar rcs $(LIBDIR)/$(CONFIG)/lib${lib.name}.a $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}/*
+  	$(Q) rm -rf $(BUILDDIR_ABSOLUTE)/tmp-merge-${lib.name}
   % endif
   % endif
   ifeq ($(SYSTEM),Darwin)