Makros:
$@	fully-qualified target
$*	$(@:db) or '%' in meta-rules
$>	name of library if target is member of
$&	all prerequisities
$<	prerequisities of current rule (inferred)
$?	all out-of-date prerequesites
$^	out-of-date prerequisities of current rule
$$	single '$'
{{	single '{'
}}	single '}'
MAKECMD	fully-qualified executable of invoked make
MAKEDIR	fully-qualified path, where make has been invoked
NULL	has permanently no character
PWD	fully-qualified current path
TMD	relative path: $(PWD) -> $(MAKEDIR)
TMPFILE	name of last temporary file
USESHELL	(this recipe line is shelled? "yes": "no")


Modifiers:
b	file name without extension
d	directory
e	extension
f	file name with extension
i	inferred names of targets
l	to lower
s/a/b/	substitutes all "a"'s with "b"'s (any strings)
t"*"	replaces in-bound whitespaces by * (any quoted string)
u	to upper
^	prepend prefix to each roken
+	append suffix to each token

Functions:
$(null,txt true false)	## (txt == $(NULL)? true: false)
$(!null,txt true false)	## true,& false must not contain whitespaces
$(eq,txt1,txt2 true false)
$(!eq,txt1,txt2 true false)
$(shell [recipeFlags]cmd)	## run command cmd & return result whitespaced
$(shell,expand [recipeFlags]cmd)	## expand the results
$(sort list)
$(strip list)	## replace all strings of whitespaces by a single space
$(subst,pat,rpl data)
$(mktmp[,[file][,txt]] data) ## file: tmp file name;; txt: return value
$(assign expr)	## (expr is macro def? expr: $(NULL))
$(nil expr)		## $(NULL) regardless of expr


Rule flags: (follow heading ':')
!	run recipe once for each out-of-date prerequisite
^	insert prerequisities before any already specified prerequisities
-	clear previous defined prerequisities
:	there is more than one rule with recipe
|	for meta-rules only: %.o :| %.c %.r ; rule <==> %.o : %.[cf] ; rule

Rule attributes:
.PROLOG	insert .GROUPPROLOG's recipe to shell-group
.EPILOG	append .GROUPEPILOG's recipe to shell-group
.IGNORE	ignore errors while making the target
.LIBRARY	target is a library
.NOSTATE	don't keep state information for this target
.PHONY	mark this target as always out-of-date
.PRECIOUS	don't remove assiociated target
.SETDIR=path	change into path before making target
.SILENT	don't echo recipe line before executing them
.SWAP	swap out dmake
.USESHELL	use secondary shell for each recipe lines
.UPDATEALL	all targets are updated with this rule
.FIRST	(in .INCLUDE) stop after successful first prerequesite
.GROUP	force recipe to be a group
.IGNOREGROUP	ignore [..] group recipes

Recipe flags: (heading a recipe line)
@	no echo of the line	(.SILENT)
-	ignore ERRORLEVEL	(.IGNORE)
%	swap dmake out	(.SWAP)
+	spawn a scondary shell to ececute that command	(.USESHELL)
[	start shell-gouping (must cover all the recipe block)
]	end shell-grouping	(.GROUP)

Targets:
.ERROR	activated after an error occured
.EXIT	stop parsing Makefile, ignore the rest
.EXPORT	place macros as variables into the environment
.IMPORT	read variables fromout the environment and define them as makros
.INCLUDE	source in another Makefile right at this place
.INCLUDEDIRS	where to search for Makefiles
.KEEP_STATE	keep state information during multiple make's
.MAKEFILES	try to read as default Makefile
.SOURCE	where to locate target names
.SOURCE.ext	where to locate files with the extension .ext
.REMOVE	rule to delete temporary files

Conditionals:
.IF expr	## expr: txt | txt1 == txt2 | txt1 != txt2
.ELIF expr	## txt == $(NULL) is only true if txt has no characters
.ELSE		## txt	is true, even if txt is a whitespace-string
.ENDIF

Macro definitions:
=	assign without expanding
*=	don't assign via '=', if macro is already assigned
:=	assign expanded
*:=	assign expanded, unless macro already defined
+=	append without expanding
+:=	append expanded
!..	silently force assignment via '..'
target ?= macro def		## use macro def while making target
