Next: Makefile Conventions Prev: Features Up: Top
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
* 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. Note: Updating Archive
* 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. *Note Old-Fashioned Suffix Rules:
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. *Note Chains of Implicit Rules:
* In System V `make', the string `$$@' has the strange meaning that,
in the dependencies of a rule with multiple targets, it stands for
the particular target that is being processed.
This is not defined in GNU `make' because `$$' should always stand
for an ordinary `$'.
It is possible to get this functionality through the use of static
pattern rules (Note: Static Pattern Rules.). The
System V `make' rule:
$(targets): $$@.o lib.a
can be replaced with the GNU `make' static pattern rule:
$(targets): %: %.o lib.a
* In System V and 4.3 BSD `make', files found by `VPATH' search
(Note: Searching Directories for Dependencies.)
have their names changed inside command strings. We feel it is
much cleaner to always use automatic variables and thus make this
* In some Unix `make's, the automatic variable `$*' appearing in the
dependencies 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 `make's, implicit rule search (Note: Using Implicit
Rules.) is apparently done for *all* targets, not
just those without commands. This means you can do:
cc -c foo.c
and Unix `make' will intuit that `foo.o' depends on `foo.c'.
We feel that such usage is broken. The dependency 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 commands, and it is treated as if it had empty commands (*note
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 dependency 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' (*note Testing the Compilation of a Program:
Testing.). 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 special treatment.
automatically generated by info2www