From http://www.gnu.org/software/make/manual/make.html:
There is another assignment operator
for variables, `?=’. This is called a
conditional variable assignment
operator, because it only has an
effect if the variable is not yet
defined. This statement:FOO ?= bar
is exactly equivalent to this (see The
origin Function):ifeq ($(origin FOO), undefined) FOO = bar endif
Probably CC
is already defined as gcc
, so CC ?= g++
won’t override the existing gcc
.