Go to the first, previous, next, last section, table of contents.

## Implicit Rule for Archive Member Targets

Recall that a target that looks like ``a(m)'` stands for the member named m in the archive file a.

When `make` looks for an implicit rule for such a target, as a special feature it considers implicit rules that match ``(m)'`, as well as those that match the actual target ``a(m)'`.

This causes one special rule whose target is ``(%)'` to match. This rule updates the target ``a(m)'` by copying the file m into the archive. For example, it will update the archive member target ``foo.a(bar.o)'` by copying the file ``bar.o'` into the archive ``foo.a'` as a member named ``bar.o'`.

When this rule is chained with others, the result is very powerful. Thus, ``make "foo.a(bar.o)"'` (the quotes are needed to protect the ``('` and ``)'` from being interpreted specially by the shell) in the presence of a file ``bar.c'` is enough to cause the following commands to be run, even without a makefile:

    cc -c bar.c -o bar.o
    ar r foo.a bar.o
    rm -f bar.o

Here `make` has envisioned the file ``bar.o'` as an intermediate file. See section Chains of Implicit Rules.

Implicit rules such as this one are written using the automatic variable ``$%'`. See section Automatic Variables.

An archive member name in an archive cannot contain a directory name, but it may be useful in a makefile to pretend that it does. If you write an archive member target ``foo.a(dir/file.o)'`, `make` will perform automatic updating with this command:

    ar r foo.a dir/file.o

which has the effect of copying the file ``dir/file.o'` into a member named ``file.o'`. In connection with such usage, the automatic variables `%D` and `%F` may be useful.

- Archive Symbols: How to update archive symbol directories.

Go to the first, previous, next, last section, table of contents.