|GNU Make Manual||www.imodulo.com · 2003-04-05|
|[ Software | Documentation | Contact ]|
Recall that a target that looks like
a(m) stands for the member named m in the archive file a.
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
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
) 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
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
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
%F may be useful.
|© Free Software Foundation, Inc.|