Archive Update (GNU make)
Next: Archive Pitfalls, Previous: Archive Members, Up: Archives [Contents][Index]
11.2 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 recipe 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 Chains of Implicit Rules.
Implicit rules such as this one are written using the automatic variable ‘$%
’. See 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 recipe:
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. |
Next: Archive Pitfalls, Previous: Archive Members, Up: Archives [Contents][Index]