foo = "bar" bar = $(foo) foo # dynamic (renewing) assignment foo := "boo" # one time assignment, $(bar) now is "boo foo" foo ?= /usr/local # safe assignment, $(foo) and $(bar) still the same bar += world # append, "boo foo world" foo != echo fooo # exec shell command and assign to foo # $(bar) now is "fooo foo world" = expressions are only evaluated when they’re being used. out.o: src.c src.h $@ #