make: Pattern-specific

 
 6.12 Pattern-specific Variable Values
 =====================================
 
 In addition to target-specific variable values (SeeTarget-specific
 Variable Values Target-specific.), GNU 'make' supports pattern-specific
 variable values.  In this form, the variable is defined for any target
 that matches the pattern specified.
 
    Set a pattern-specific variable value like this:
 
      PATTERN ... : VARIABLE-ASSIGNMENT
    where PATTERN is a %-pattern.  As with target-specific variable
 values, multiple PATTERN values create a pattern-specific variable value
 for each pattern individually.  The VARIABLE-ASSIGNMENT can be any valid
 form of assignment.  Any command line variable setting will take
 precedence, unless 'override' is specified.
 
    For example:
 
      %.o : CFLAGS = -O
 
 will assign 'CFLAGS' the value of '-O' for all targets matching the
 pattern '%.o'.
 
    If a target matches more than one pattern, the matching
 pattern-specific variables with longer stems are interpreted first.
 This results in more specific variables taking precedence over the more
 generic ones, for example:
 
      %.o: %.c
              $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
 
      lib/%.o: CFLAGS := -fPIC -g
      %.o: CFLAGS := -g
 
      all: foo.o lib/bar.o
 
    In this example the first definition of the 'CFLAGS' variable will be
 used to update 'lib/bar.o' even though the second one also applies to
 this target.  Pattern-specific variables which result in the same stem
 length are considered in the order in which they were defined in the
 makefile.
 
    Pattern-specific variables are searched after any target-specific
 variables defined explicitly for that target, and before target-specific
 variables defined for the parent target.