make: Missing
1
1 15 Incompatibilities and Missing Features
1 *****************************************
1
1 The 'make' programs in various other systems support a few features that
1 are not implemented in GNU 'make'. The POSIX.2 standard ('IEEE Standard
1 1003.2-1992') which specifies 'make' does not require any of these
1 features.
1
1 * A target of the form 'FILE((ENTRY))' stands for a member of archive
1 file FILE. The member is chosen, not by name, but by being an
1 object file which defines the linker symbol ENTRY.
1
1 This feature was not put into GNU 'make' because of the
1 non-modularity of putting knowledge into 'make' of the internal
11 format of archive file symbol tables. ⇒Updating Archive
Symbol Directories Archive Symbols.
1
1 * Suffixes (used in suffix rules) that end with the character '~'
1 have a special meaning to System V 'make'; they refer to the SCCS
1 file that corresponds to the file one would get without the '~'.
1 For example, the suffix rule '.c~.o' would make the file 'N.o' from
1 the SCCS file 's.N.c'. For complete coverage, a whole series of
11 such suffix rules is required. ⇒Old-Fashioned Suffix Rules
Suffix Rules.
1
1 In GNU 'make', this entire series of cases is handled by two
1 pattern rules for extraction from SCCS, in combination with the
11 general feature of rule chaining. ⇒Chains of Implicit Rules
Chained Rules.
1
1 * In System V and 4.3 BSD 'make', files found by 'VPATH' search
1 (⇒Searching Directories for Prerequisites Directory Search.)
1 have their names changed inside recipes. We feel it is much
1 cleaner to always use automatic variables and thus make this
1 feature obsolete.
1
1 * In some Unix 'make's, the automatic variable '$*' appearing in the
1 prerequisites of a rule has the amazingly strange "feature" of
1 expanding to the full name of the _target of that rule_. We cannot
1 imagine what went on in the minds of Unix 'make' developers to do
1 this; it is utterly inconsistent with the normal definition of
1 '$*'.
1
11 * In some Unix 'make's, implicit rule search (⇒Using Implicit
Rules Implicit Rules.) is apparently done for _all_ targets, not
1 just those without recipes. This means you can do:
1
1 foo.o:
1 cc -c foo.c
1
1 and Unix 'make' will intuit that 'foo.o' depends on 'foo.c'.
1
1 We feel that such usage is broken. The prerequisite properties of
1 'make' are well-defined (for GNU 'make', at least), and doing such
1 a thing simply does not fit the model.
1
1 * GNU 'make' does not include any built-in implicit rules for
1 compiling or preprocessing EFL programs. If we hear of anyone who
1 is using EFL, we will gladly add them.
1
1 * It appears that in SVR4 'make', a suffix rule can be specified with
11 no recipe, and it is treated as if it had an empty recipe (⇒
Empty Recipes). For example:
1
1 .c.a:
1
1 will override the built-in '.c.a' suffix rule.
1
1 We feel that it is cleaner for a rule without a recipe to always
1 simply add to the prerequisite list for the target. The above
1 example can be easily rewritten to get the desired behavior in GNU
1 'make':
1
1 .c.a: ;
1
1 * Some versions of 'make' invoke the shell with the '-e' flag, except
1 under '-k' (⇒Testing the Compilation of a Program Testing.).
1 The '-e' flag tells the shell to exit as soon as any program it
1 runs returns a nonzero status. We feel it is cleaner to write each
1 line of the recipe to stand on its own and not require this special
1 treatment.
1