You can write a special kind of suffix rule for dealing with archive
files. See Suffix Rules, for a full explanation of suffix rules.
Archive suffix rules are obsolete in GNU make
, because pattern
rules for archives are a more general mechanism (see Archive Update). But they are retained for compatibility with other
make
s.
To write a suffix rule for archives, you simply write a suffix rule using the target suffix ‘.a’ (the usual suffix for archive files). For example, here is the old-fashioned suffix rule to update a library archive from C source files:
.c.a: $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o $(AR) r $@ $*.o $(RM) $*.o
This works just as if you had written the pattern rule:
(%.o): %.c $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o $(AR) r $@ $*.o $(RM) $*.o
In fact, this is just what make
does when it sees a suffix rule
with ‘.a’ as the target suffix. Any double-suffix rule
‘.x.a’ is converted to a pattern rule with the target
pattern ‘(%.o)’ and a prerequisite pattern of ‘%.x’.
Since you might want to use ‘.a’ as the suffix for some other kind
of file, make
also converts archive suffix rules to pattern rules
in the normal way (see Suffix Rules). Thus a double-suffix rule
‘.x.a’ produces two pattern rules: ‘(%.o):
%.x’ and ‘%.a: %.x’.