Rule: output := $(patsubst pattern, replaced_with, input_text)
Result: From src/a.c src/b.c src/c.c to bin/a bin/b bin/c .
$(subst ee,EE,feet on the street)
Rule: output := $(subst from, to, text)
Result: fEEt on the strEEt
$(foreach OP, ProgA ProgB ProgC, good/$(OP))
Name: Foreach Function
Rule: output := $(foreach variable, list, text)
Result: good/ProgA good/ProgB good/ProgC
$(filter-out main1.o main2.o, main1.o foo.o main2.o bar.o)
Rule: output := $(filter-out pattern, text)
Result: foo.o bar.o
$(shell ls | wc -l )
Name: Shell Function
Rule: output := $(shell command)
Result: Number of files
$(addprefix $(OBJDIR)/, foo.o bar.o baz.o)
Rule: output := $(addprefix prefix, names...)
Result: objdir/foo.o objdir/bar.o objdir/baz.o
$(findstring a, a b c)
Name: Text Function - Find String
Rule: output := $(findstring find, in). If it is found, output = find, else, output = empty
Result: a
$(strip a b c )
Name: Text Function - Strip (Remove leading and trailing whitespaces)
Rule: output := $(strip string)
Result: "a b c"
$(notdir src/foo.c bar.c)
Name: File Name Function - Not Directory (basename)
Rule: output := $(notdir names...)
Result: foo.c bar.c
$(call reverse, a b) #given that reverse = $(2) $(1)
Name: Call Function
Behavior: Call defined variable with parameters
Rule: output := $(call variable, param, param...)
Result: b a
$(eval $(call LINK_TARGET, $(BIN)/$(_bin))) #given that LINK_TARGET is a variable defined earlier
Name: Eval Function
Behavior: Create a new makefile environment with the argument passed into eval, then parse it just like makefile syntax.
Rule: output(empty string) := $(eval argument)