13. Incompatibilities and Missing Features
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
nonmodularity of putting knowledge into
make of the internal
format of archive file symbol tables.
See section Updating Archive Symbol Directories.
Suffixes (used in suffix rules) that end with the character `~'
have a special meaning to System V
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 Old-Fashioned Suffix Rules.
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 Chains of Implicit Rules.
In System V and 4.3 BSD
make, files found by
(see section Searching Directories for Prerequisites) have their names changed inside command
strings. 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 section Using Implicit Rules) is apparently done for
all targets, not just those without commands. This means you can
make will intuit that `foo.o' depends on
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.
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 commands, and it is treated as if it had empty commands
(see section 5.8 Using Empty Commands). For example:
will override the built-in `.c.a' suffix rule.
We feel that it is cleaner for a rule without commands to always simply
add to the prerequisite list for the target. The above example can be
easily rewritten to get the desired behavior in GNU
Some versions of
make invoke the shell with the `-e' flag,
except under `-k' (see section Testing the Compilation of a Program). The `-e' flag tells the shell to exit as soon as any
program it runs returns a nonzero status. We feel it is cleaner to
write each shell command line to stand on its own and not require this