Copyright (C) 2000-2012 |
GNU Info (make.info)Archive UpdateImplicit 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. 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.
automatically generated by info2www version 1.2.2.9 |