Based on https://www.gnu.org/software/make/manual/html_node/Quick-Reference.html
| Directive | Description | 
|---|---|
| define variabledefine variable =define variable :=define variable ::=define variable +=define variable ?=endef | Define multi-line variables. | 
| undefine variable | Undefining variables. | 
| ifdef variableifndef variableifeq (a,b)ifeq "a" "b"ifeq 'a' 'b'ifneq (a,b)ifneq "a" "b"ifneq 'a' 'b'elseendif | Conditionally evaluate part of the makefile. | 
| include file-include filesinclude file | Include another makefile. | 
| override variable-assignment | Define a variable, overriding any previous definition, even one from the command line. | 
| export | Tell make to export all variables to child processes by default. | 
| export variableexport variable-assignmentunexport variable | Tell make whether or not to export a particular variable to child processes. | 
| private variable-assignment | Do not allow this variable assignment to be inherited by prerequisites. | 
| vpath pattern path | Specify a search path for files matching a '%' pattern. | 
| vpath pattern | Remove all search paths previously specified for pattern. | 
| vpath | Remove all search paths previously specified in any vpath directive. | 
| Function | Description | 
|---|---|
| $(subst from,to,text) | Replace fromwithtointext. | 
| $(patsubst pattern,replacement,text) | Replace words matching patternwithreplacementintext. | 
| $(strip string) | Remove excess whitespace characters from string. | 
| $(findstring find,text) | Locate find in text. | 
| $(filter pattern…,text) | Select words in textthat match one of thepatternwords. | 
| $(filter-out pattern…,text) | Select words in textthat do not match any of thepatternwords. | 
| $(sort list) | Sort the words in listlexicographically, removing duplicates. | 
| $(word n,text) | Extract the n-th word (one-origin) oftext. | 
| $(words text) | Count the number of words in text. | 
| $(wordlist s,e,text) | Returns the list of words in textfromstoe. | 
| $(firstword names…) | Extract the first word of names. | 
| $(lastword names…) | Extract the last word of names. | 
| $(dir names…) | Extract the directory part of each file name. | 
| $(notdir names…) | Extract the non-directory part of each file name. | 
| $(suffix names…) | Extract the suffix (the last '.' and following characters) of each file name. | 
| $(basename names…) | Extract the base name (name without suffix) of each file name. | 
| $(addsuffix suffix,names…) | Append suffixto each word innames. | 
| $(addprefix prefix,names…) | Prepend prefixto each word innames. | 
| $(join list1,list2) | Join two parallel lists of words. | 
| $(wildcard pattern…) | Find file names matching a shell file name pattern (not a '%' pattern). | 
| $(realpath names…) | For each file name in names, expand to an absolute name that does not contain any ., .., nor symlinks. | 
| $(abspath names…) | For each file name in names, expand to an absolute name that does not contain any . or .. components, but preserves symlinks. | 
| $(error text…) | When this function is evaluated, make generates a fatal error with the message text. | 
| $(warning text…) | When this function is evaluated, make generates a warning with the message text. | 
| $(shell command) | Execute a shell command and return its output. | 
| $(origin variable) | Return a string describing how the make variable variablewas defined. | 
| $(flavor variable) | Return a string describing the flavor of the make variable variable. | 
| $(foreach var,words,text) | Evaluate textwithvarbound to each word inwords, and concatenate the results. | 
| $(if cond,then-part[,else-part]) | Evaluate cond; if it’s non-empty substitute the expansion of thethen-partotherwise substitute the expansion of theelse-part. | 
| $(or cond1[,cond2[,cond3…]]) | Evaluate condNone at a time; substitute the first non-empty expansion. If all expansions are empty, substitute the empty string. | 
| $(and cond1[,cond2[,cond3…]]) | Evaluate condNone at a time; if any results in empty string substitute the empty string. Otherwise substitute the expansion of the lastcondN. | 
| $(call var,param,…) | Evaluate the variable varreplacing any references to$(1),$(2)with the first, second, etc. param values. | 
| $(eval text) | Evaluate textthen read the results as makefile commands; expands to the empty string. | 
| $(file op filename,text) | Expand the arguments, then open the file filenameusing modeopand writetextto that file. | 
| $(value var) | Evaluates to the contents of the variable var, with no expansion performed on it. | 
| Variable | Description | 
|---|---|
| $@ | The file name of the target. | 
| $% | The target member name, when the target is an archive member. | 
| $< | The name of the first prerequisite. | 
| $? | The names of all the prerequisites newer than the target, with spaces between them. For prerequisites which are archive members, only the named member is used (see Archives). | 
| $^$+ | The names of all the prerequisites, with spaces between them. For prerequisites which are archive members, only the named member is used (see Archives). The value of | 
| $* | The stem with which an implicit rule matches (see How Patterns Match). | 
| $(@D)$(@F) | The directory part and the file-within-directory part of $@. | 
| $(*D)$(*F) | The directory part and the file-within-directory part of $*. | 
| $(%D)$(%F) | The directory part and the file-within-directory part of $%. | 
| $(<D)$(<F) | The directory part and the file-within-directory part of $<. | 
| $(^D)$(^F) | The directory part and the file-within-directory part of $^. | 
| $(+D)$(+F) | The directory part and the file-within-directory part of $+. | 
| $(?D)$(?F) | The directory part and the file-within-directory part of $?. | 
| Variables | Description | 
|---|---|
| MAKEFILES | Makefiles to be read on every invocation of make. | 
| VPATH | Directory search path for files not found in the current directory. | 
| SHELL | The name of the system default command interpreter, usually /bin/sh. | 
| MAKESHELL | The name of the command interpreter that is to be used by make, taking precedence over SHELL(MS-DOS only). | 
| MAKE | The name with which make was invoked (using this variable in recipes has special meaning). | 
| MAKE_VERSION | The built-in variable MAKE_VERSIONexpands to the version number of the GNU make program. | 
| MAKE_HOST | The built-in variable MAKE_HOSTexpands to a string representing the host that GNU make was built to run on. | 
| MAKELEVEL | The number of levels of recursion (sub-makes). | 
| MAKEFLAGS | The flags given to make. You can set this in the environment or a makefile to set flags. It is never appropriate to use MAKEFLAGS directly in a recipe line: its contents may not be quoted correctly for use in the shell. Always allow recursive make’s to obtain these values through the environment from its parent. | 
| GNUMAKEFLAGS | Other flags parsed by make. You can set this in the environment or a makefile to set make command-line flags. GNU make never sets this variable itself. This variable is only needed if you’d like to set GNU make-specific flags in a POSIX-compliant makefile. This variable will be seen by GNU make and ignored by other make implementations. It’s not needed if you only use GNU make; just use MAKEFLAGS directly. See Communicating Options to a Sub-make. | 
| MAKECMDGOALS | The targets given to make on the command line. Setting this variable has no effect on the operation of make. | 
| CURDIR | Set to the absolute pathname of the current working directory (after all -C options are processed, if any). Setting this variable has no effect on the operation of make. | 
| SUFFIXES | The default list of suffixes before make reads any makefiles. | 
| .LIBPATTERNS | Defines the naming of the libraries make searches for, and their order. |