get a default value when variable is unset in make get a default value when variable is unset in make bash bash

get a default value when variable is unset in make


If you want to use the expansion of a GNU make variable if it is non-empty and a default value if it is empty, but not set the variable, you can do something like this:

all:        echo $(or $(VARNAME),default value)


If you want to test if a variable has a non-empty value, you can use:

ifeq ($(VARNAME),)        VARNAME="default value"else        do_something_elseendif

For checking if a variable has been defined or not, use ifdef.

Refer to Syntax of Conditionals in the manual for more.


I have a similar case where the result of filtering a shell command could be a single word or empty string. When empty, it should fallback to the default word. In the example below APPLE_LINUX will be 'apple' on macOS or 'linux' on other platforms. MSG will be set to the message for the appropriate platform. The example intentionality avoids using ifeq.

MACHINE         := $(shell $(COMPILE.cpp) -dumpmachine)MACHINE_APPLE   := $(findstring apple,$(MACHINE))APPLE_LINUX     := $(firstword $(MACHINE_APPLE) linux)apple.MSG       := You are building on macOSlinux.MSG       := You are building on Linux or another OSMSG             := $($(APPLE_LINUX).MSG)