Chapter 14: Incompatibilities and Missing Features 147
14 Incompatibilities and Missing Features
The make programs in various other systems support a few features that are not implemented
in GNU make. The POSIX.2 standard (IEEE Standard 1003.2-1992) which specifies make
does not require any of these features.
• A target of the form ‘file((entry))’ stands for a member of archive file file. The
member is chosen, not by name, but by being an object file which defines the linker
symbol entry.
This feature was not put into GNU make because of the non-modularity of putting
knowledge into make of the internal format of archive file symbol tables. See
Section 11.2.1 [Updating Archive Symbol Directories], page 130.
• Suffixes (used in suffix rules) that end with the character ‘~’ have a special meaning to
System V make; they refer to the SCCS file that corresponds to the file one would get
without the ‘~’. For example, the suffix rule ‘.c~.o’ would make the file n.o from the
SCCS file s.n.c. For complete coverage, a whole series of such suffix rules is required.
See Section 10.7 [Old-Fashioned Suffix Rules], page 125.
In GNU make, this entire series of cases is handled by two pattern rules for extraction
from SCCS, in combination with the general feature of rule chaining. See Section 10.4
[Chains of Implicit Rules], page 117.
• In System V and 4.3 BSD make, files found by VPATH search (see Section 4.4 [Searching
Directories for Prerequisites], page 25) have their names changed inside recipes. We
feel it is much cleaner to always use automatic variables and thus make this feature
obsolete.
• In some Unix makes, the automatic variable $* appearing in the prerequisites of a rule
has the amazingly strange “feature” of expanding to the full name of the target of that
rule. We cannot imagine what went on in the minds of Unix make developers to do
this; it is utterly inconsistent with the normal definition of $*.
• In some Unix makes, implicit rule search (see Chapter 10 [Using Implicit Rules],
page 111) is apparently done for all targets, not just those without recipes. This
means you can do:
foo.o:
cc -c foo.c
and Unix make will intuit that foo.o depends on foo.c.
We feel that such usage is broken. The prerequisite properties of make are well-defined
(for GNU make, at least), and doing such a thing simply does not fit the model.
• GNU make does not include any built-in implicit rules for compiling or preprocessing
EFL programs. If we hear of anyone who is using EFL, we will gladly add them.
• It appears that in SVR4 make, a suffix rule can be specified with no recipe, and it is
treated as if it had an empty recipe (see Section 5.9 [Empty Recipes], page 57). For
example:
.c.a:
will override the built-in .c.a suffix rule.
Comentários a estes Manuais