A little crude, but should work.
This needs bc
to be installed to compare integers. In Make >=4.4 you can use $(intcmp )
instead.
ifneq ($(filter undefined default,$(origin CXX)),)
CXX := $(shell bash -c "compgen -c g++- | grep -P '^g\+\+-\d+(?=\.exe$$|$$)' | sort -n -t- -k2 | tail -1")
$(info Guessed CXX=$(CXX))
else
$(info CXX=$(CXX))
endif
# If using GCC...
ifneq ($(filter g++-%,$(CXX)),)
# Guess version.
GCC_VER := $(word 2,$(subst -, ,$(subst ., ,$(CXX))))
$(info GCC_VER=$(GCC_VER))
# Check version.
GCC_VER_OK := $(shell echo '$(GCC_VER) >= 9' | bc)
ifeq ($(GCC_VER_OK),0)
$(error Need GCC version >= 9, but got $(GCC_VER))
else ifneq ($(GCC_VER_OK),1)
$(error `bc` is not installed)
endif
endif