DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(make.info.gz) Static Usage

Info Catalog (make.info.gz) Static Pattern (make.info.gz) Static Pattern (make.info.gz) Static versus Implicit
 
 4.12.1 Syntax of Static Pattern Rules
 -------------------------------------
 
 Here is the syntax of a static pattern rule:
 
      TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ...
              COMMANDS
              ...
 
 The TARGETS list specifies the targets that the rule applies to.  The
 targets can contain wildcard characters, just like the targets of
 ordinary rules ( Using Wildcard Characters in File Names
 Wildcards.).
 
    The TARGET-PATTERN and PREREQ-PATTERNS say how to compute the
 prerequisites of each target.  Each target is matched against the
 TARGET-PATTERN to extract a part of the target name, called the "stem".
 This stem is substituted into each of the PREREQ-PATTERNS to make the
 prerequisite names (one from each PREREQ-PATTERN).
 
    Each pattern normally contains the character `%' just once.  When the
 TARGET-PATTERN matches a target, the `%' can match any part of the
 target name; this part is called the "stem".  The rest of the pattern
 must match exactly.  For example, the target `foo.o' matches the
 pattern `%.o', with `foo' as the stem.  The targets `foo.c' and
 `foo.out' do not match that pattern.
 
    The prerequisite names for each target are made by substituting the
 stem for the `%' in each prerequisite pattern.  For example, if one
 prerequisite pattern is `%.c', then substitution of the stem `foo'
 gives the prerequisite name `foo.c'.  It is legitimate to write a
 prerequisite pattern that does not contain `%'; then this prerequisite
 is the same for all targets.
 
    `%' characters in pattern rules can be quoted with preceding
 backslashes (`\').  Backslashes that would otherwise quote `%'
 characters can be quoted with more backslashes.  Backslashes that quote
 `%' characters or other backslashes are removed from the pattern before
 it is compared to file names or has a stem substituted into it.
 Backslashes that are not in danger of quoting `%' characters go
 unmolested.  For example, the pattern `the\%weird\\%pattern\\' has
 `the%weird\' preceding the operative `%' character, and `pattern\\'
 following it.  The final two backslashes are left alone because they
 cannot affect any `%' character.
 
    Here is an example, which compiles each of `foo.o' and `bar.o' from
 the corresponding `.c' file:
 
      objects = foo.o bar.o
 
      all: $(objects)
 
      $(objects): %.o: %.c
              $(CC) -c $(CFLAGS) $< -o $@
 
 Here `$<' is the automatic variable that holds the name of the
 prerequisite and `$@' is the automatic variable that holds the name of
 the target; see  Automatic Variables.
 
    Each target specified must match the target pattern; a warning is
 issued for each target that does not.  If you have a list of files,
 only some of which will match the pattern, you can use the `filter'
 function to remove nonmatching file names ( Functions for String
 Substitution and Analysis Text Functions.):
 
      files = foo.elc bar.o lose.o
 
      $(filter %.o,$(files)): %.o: %.c
              $(CC) -c $(CFLAGS) $< -o $@
      $(filter %.elc,$(files)): %.elc: %.el
              emacs -f batch-byte-compile $<
 
 In this example the result of `$(filter %.o,$(files))' is `bar.o
 lose.o', and the first static pattern rule causes each of these object
 files to be updated by compiling the corresponding C source file.  The
 result of `$(filter %.elc,$(files))' is `foo.elc', so that file is made
 from `foo.el'.
 
    Another example shows how to use `$*' in static pattern rules: 
 
      bigoutput littleoutput : %output : text.g
              generate text.g -$* > $@
 
 When the `generate' command is run, `$*' will expand to the stem,
 either `big' or `little'.
 
Info Catalog (make.info.gz) Static Pattern (make.info.gz) Static Pattern (make.info.gz) Static versus Implicit
automatically generated byinfo2html