Home GNU Make Manual www.imodulo.com · 2003-04-05

Archive Update

[ Up: Archives ]
[ Previous: Archive Members ][ Next: Archive Pitfalls ]

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. Chains of Implicit Rules.

Implicit rules such as this one are written using the automatic variable $%. 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.