diff options
Diffstat (limited to 'devdocs/gnu_make/missing.html')
| -rw-r--r-- | devdocs/gnu_make/missing.html | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/devdocs/gnu_make/missing.html b/devdocs/gnu_make/missing.html new file mode 100644 index 00000000..751d2fcc --- /dev/null +++ b/devdocs/gnu_make/missing.html @@ -0,0 +1,21 @@ + <h1 class="chapter">Incompatibilities and Missing Features</h1> <p>The <code>make</code> programs in various other systems support a few features that are not implemented in GNU <code>make</code>. The POSIX.2 standard (<cite>IEEE Standard 1003.2-1992</cite>) which specifies <code>make</code> does not require any of these features. </p> <ul> <li> A target of the form ‘<samp><var>file</var>((<var>entry</var>))</samp>’ stands for a member of archive file <var>file</var>. The member is chosen, not by name, but by being an object file which defines the linker symbol <var>entry</var>. <p>This feature was not put into GNU <code>make</code> because of the non-modularity of putting knowledge into <code>make</code> of the internal format of archive file symbol tables. See <a href="archive-symbols">Updating Archive Symbol Directories</a>. </p> </li> +<li> Suffixes (used in suffix rules) that end with the character ‘<samp>~</samp>’ have a special meaning to System V <code>make</code>; they refer to the SCCS file that corresponds to the file one would get without the ‘<samp>~</samp>’. For example, the suffix rule ‘<samp>.c~.o</samp>’ would make the file <samp><var>n</var>.o</samp> from the SCCS file <samp>s.<var>n</var>.c</samp>. For complete coverage, a whole series of such suffix rules is required. See <a href="suffix-rules">Old-Fashioned Suffix Rules</a>. <p>In GNU <code>make</code>, 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 <a href="chained-rules">Chains of Implicit Rules</a>. </p> </li> +<li> In System V and 4.3 BSD <code>make</code>, files found by <code>VPATH</code> search (see <a href="directory-search">Searching Directories for Prerequisites</a>) have their names changed inside recipes. We feel it is much cleaner to always use automatic variables and thus make this feature unnecessary. </li> +<li> In some Unix <code>make</code>s, the automatic variable <code>$*</code> appearing in the prerequisites of a rule has the amazingly strange “feature” of expanding to the full name of the <em>target of that rule</em>. We cannot imagine what went on in the minds of Unix <code>make</code> developers to do this; it is utterly inconsistent with the normal definition of <code>$*</code>. </li> +<li> In some Unix <code>make</code>s, implicit rule search (see <a href="implicit-rules">Using Implicit Rules</a>) is apparently done for <em>all</em> targets, not just those without recipes. This means you can do: <div class="example"> <pre class="example">foo.o: + cc -c foo.c +</pre> +</div> <p>and Unix <code>make</code> will intuit that <samp>foo.o</samp> depends on <samp>foo.c</samp>. </p> <p>We feel that such usage is broken. The prerequisite properties of <code>make</code> are well-defined (for GNU <code>make</code>, at least), and doing such a thing simply does not fit the model. </p> </li> +<li> GNU <code>make</code> 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. </li> +<li> It appears that in SVR4 <code>make</code>, a suffix rule can be specified with no recipe, and it is treated as if it had an empty recipe (see <a href="empty-recipes">Empty Recipes</a>). For example: <div class="example"> <pre class="example">.c.a: +</pre> +</div> <p>will override the built-in <samp>.c.a</samp> suffix rule. </p> <p>We feel that it is cleaner for a rule without a recipe 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 <code>make</code>: </p> <div class="example"> <pre class="example">.c.a: ; +</pre> +</div> </li> +<li> Some versions of <code>make</code> invoke the shell with the ‘<samp>-e</samp>’ flag, except under ‘<samp>-k</samp>’ (see <a href="testing">Testing the Compilation of a Program</a>). The ‘<samp>-e</samp>’ 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 line of the recipe to stand on its own and not require this special treatment. </li> +</ul><div class="_attribution"> + <p class="_attribution-p"> + Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc. <br>Licensed under the GNU Free Documentation License.<br> + <a href="https://www.gnu.org/software/make/manual/html_node/Missing.html" class="_attribution-link">https://www.gnu.org/software/make/manual/html_node/Missing.html</a> + </p> +</div> |
