Next: Archive Suffix Rules Prev: Archive Members Up: Archives
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
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.
Note: Chains of Implicit Rules.
Implicit rules such as this one are written using the automatic
variable `$%'. Note: 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.
automatically generated by info2www