You may like an approach I came up with some time ago.
In my included file that's common among my Makefiles:
# Ensure the macro named is set to a non-empty value.
varchk_call = $(if $($(1)),,$(error $(1) is not set from calling environment))
# Ensure all the macros named in the list are set to a non-empty value.
varchklist_call = $(foreach v,$(1),$(call varchk_call,$v))
At the top of a Makefile that I want to ensure certain variables are set before it runs:
$(call varchklist_call,\
INSTDIR \
PACKAGE \
RELEASE \
VERSION)
I usually do these checks in sub-Makefiles to ensure someone didn't break the top level Makefile by not passing down a required macro.