DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(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