Scripsit Paul D. Smith
> Anyway, you can easily split the current MAKE_VERSION already, like this:
>
> $(subst ., ,$(MAKE_VERSION))
Oops. Major communications foul-up detected. Backtrack to my original
request and change it to:
The existence of $(MAKE_VERSION) should be better documented. I
needed it, and did not find it when I searched for "version" in the
manual's index or followed crossreferences from node "Values".
A patch that does this is attached.
--
Henning Makholm "... det kan ikke blive fortalt
med hans egne ord, for efter den 11.
september glemte han at f�re dagbog i lang tid."
--- make-3.80.orig/doc/make.texi Wed Sep 18 22:51:58 2002
+++ make-3.80/doc/make.texi Wed Oct 30 21:54:06 2002
@@ -156,7 +156,6 @@
* Include:: How one makefile can use another makefile.
* MAKEFILES Variable:: The environment can specify extra makefiles.
* MAKEFILE_LIST Variable:: Discover which makefiles have been read.
-* Special Variables:: Other special variables.
* Remaking Makefiles:: How makefiles get remade.
* Overriding Makefiles:: How to override part of one makefile
with another makefile.
@@ -247,6 +246,7 @@
basis.
* Pattern-specific:: Target-specific variable values can be applied
to a group of targets that match a pattern.
+* Specials:: Miscellaneous variables with special values.
Advanced Features for Reference to Variables
@@ -949,7 +949,6 @@
* Include:: How one makefile can use another makefile.
* MAKEFILES Variable:: The environment can specify extra makefiles.
* MAKEFILE_LIST Variable:: Discover which makefiles have been read.
-* Special Variables:: Other special variables.
* Remaking Makefiles:: How makefiles get remade.
* Overriding Makefiles:: How to override part of one makefile
with another makefile.
@@ -1217,7 +1216,7 @@
anyone else. It is much better to write explicit @code{include} directives
in the makefiles. @xref{Include, , Including Other Makefiles}.
-@node MAKEFILE_LIST Variable, Special Variables, MAKEFILES Variable, Makefiles
+@node MAKEFILE_LIST Variable, Remaking Makefiles, MAKEFILES Variable, Makefiles
@comment node-name, next, previous, up
@section The Variable @code{MAKEFILE_LIST}
@cindex makefiles, and @code{MAKEFILE_LIST} variable
@@ -1265,37 +1264,7 @@
Variables}, for more information on simply-expanded (@code{:=})
variable definitions.
-@node Special Variables, Remaking Makefiles, MAKEFILE_LIST Variable, Makefiles
-@comment node-name, next, previous, up
-@section Other Special Variables
-@cindex makefiles, and special variables
-@cindex special variables
-
-GNU @code{make} also supports a special variable. Note that any value
-you assign to this variable will be ignored; it will always return its
-special value.
-
-@vindex $(.VARIABLES)
-@vindex .VARIABLES @r{(list of variables)}
-The first special variable is @code{.VARIABLES}. When expanded, the
-value consists of a list of the @emph{names} of all global variables
-defined in all makefiles read up until that point. This includes
-variables which have empty values, as well as built-in variables
-(@pxref{Implicit Variables, , Variables Used by Implicit Rules}), but
-does not include any variables which are only defined in a
-target-specific context.
-
-@c @vindex $(.TARGETS)
-@c @vindex .TARGETS @r{(list of targets)}
-@c The second special variable is @code{.TARGETS}. When expanded, the
-@c value consists of a list of all targets defined in all makefiles read
-@c up until that point. Note it's not enough for a file to be simply
-@c mentioned in the makefile to be listed in this variable, even if it
-@c would match an implicit rule and become an ``implicit target''. The
-@c file must appear as a target, on the left-hand side of a ``:'', to be
-@c considered a target for the purposes of this variable.
-
-@node Remaking Makefiles, Overriding Makefiles, Special Variables, Makefiles
+@node Remaking Makefiles, Overriding Makefiles, MAKEFILE_LIST Variable, Makefiles
@section How Makefiles Are Remade
@cindex updating makefiles
@@ -3356,6 +3325,7 @@
directory along your @code{PATH}.
@cindex environment, @code{SHELL} in
+@vindex MAKESHELL @r{(MS-DOS alternative to @code{SHELL})}
Unlike most variables, the variable @code{SHELL} is never set from the
environment. This is because the @code{SHELL} environment variable is
used to specify your personal choice of shell program for interactive
@@ -3627,6 +3597,8 @@
@code{make} commands as @samp{.PHONY} (for more discussion on when
this is useful, see @ref{Phony Targets}).
+@vindex CURDIR
+@vindex $(CURDIR)
For your convenience, GNU @code{make} sets the variable @code{CURDIR} to
the pathname of the current working directory for you. If @code{-C} is
in effect, it will contain the path of the new directory, not the
@@ -4253,6 +4225,7 @@
basis.
* Pattern-specific:: Target-specific variable values can be applied
to a group of targets that match a pattern.
+* Specials:: Miscellaneous variables with special values.
@end menu
@node Reference, Flavors, Using Variables, Using Variables
@@ -4792,6 +4765,11 @@
@item
Several variables have constant initial values.
@xref{Implicit Variables, ,Variables Used by Implicit Rules}.
+
+@item
+Several variables have their values set in special ways that defy
+classification.
+@xref{Specials, ,Special Variables}.
@end itemize
@node Setting, Appending, Values, Using Variables
@@ -5229,7 +5207,7 @@
command scripts that create @file{prog.o}, @file{foo.o}, and
@file{bar.o}, and any command scripts which create their prerequisites.
-@node Pattern-specific, , Target-specific, Using Variables
+@node Pattern-specific, Specials, Target-specific, Using Variables
@section Pattern-specific Variable Values
@cindex pattern-specific variables
@cindex variables, pattern-specific
@@ -5272,6 +5250,102 @@
will assign @code{CFLAGS} the value of @samp{-O} for all targets
matching the pattern @code{%.o}.
+@node Specials, , Pattern-specific, Using Variables
+@section Special Variables
+
+There are several variables that get their values in special ways.
+They are collected here for easy reference:
+
+@table @code
+@item CURDIR
+The pathname of the current working directory.
+@xref{Recursion, ,Recursive Use of @code{make}}.
+
+@item .LIBPATTERNS
+Defines the naming of the libraries @code{make} searches for, and their
+order. The default value depends on the operating system.@*
+@xref{Libraries/Search, ,Directory Search for Link Libraries}.
+
+@item MAKE
+The command to use for recursive @code{make} commands. This variable
+also has some magic properties when it is @emph{used};
+@ref{MAKE Variable, ,How the @code{MAKE} Variable Works}
+
+@item MAKECMDGOALS
+The list of goals specified on the command line
+@xref{Goals, ,Arguments to Specify the Goals}.
+
+@item MAKE_COMMAND
+@vindex MAKE_COMMAND
+@vindex $(MAKE_COMMAND)
+Equivalent to @code{MAKE}. In fact, @code{$(MAKE)} unfolds to
+@code{$(MAKE_COMMAND)} which is what is actually has a special
+value. This is for historical compatibility; you should not depend on
+this set-up.
+
+@item MAKEOVERRIDES
+@itemx MFLAGS
+@itemx MAKEFLAGS
+Used for passing options to recursive invocations of @code{make}.
+@xref{Options/Recursion, ,Communicating Options to a Sub-@code{make}}.
+
+@item MAKEFILE_LIST
+The names of makefiles that @code{make} has begun reading yet.
+@xref{MAKEFILE_LIST Variable, ,The Variable @code{MAKEFILE_LIST}}.
+
+@c @item MAKEFILES
+@c (This is set automatically, but to the empty string, so it might
+@c as well not be set. Certainly we need not mention it here.)
+
+@item MAKELEVEL
+The number of levels of recursion (sub-@code{make}s).
+@xref{Variables/Recursion, ,Communicating Variables to a Sub-@code{make}}.
+
+@item MAKE_VERSION
+@vindex $(MAKE_VERSION)
+@vindex MAKE_VERSION
+Set to the version number of @code{make}.
+
+@item SHELL
+Used for executing commands. Defaults to @file{/bin/sh} on Unix, but
+with variations on other operating systems.
+@xref{Execution, ,Command Execution}.
+
+@item SUFFIXES
+@vindex $(SUFFIXES)
+@vindex SUFFIXES @r{(default list of suffixes)}
+The default list of suffixes recognised for suffix rules.
+@xref{Suffix Rules, ,Old-Fashioned Suffix Rules}.
+
+@c @item .TARGETS
+@c @vindex $(.TARGETS)
+@c @vindex .TARGETS @r{(list of targets)}
+@c The second special variable is @code{.TARGETS}. When expanded, the
+@c value consists of a list of all targets defined in all makefiles read
+@c up until that point. Note it's not enough for a file to be simply
+@c mentioned in the makefile to be listed in this variable, even if it
+@c would match an implicit rule and become an ``implicit target''. The
+@c file must appear as a target, on the left-hand side of a ``:'', to be
+@c considered a target for the purposes of this variable.
+@c
+@c @code{.TARGETS} is so special that any value you assign to it will be
+@c ignored; it will always return its special value.
+
+@item .VARIABLES
+@vindex $(.VARIABLES)
+@vindex .VARIABLES @r{(list of variables)}
+When expanded, the value of @code{VARIABLES} consists of a list of the
+@emph{names} of all global variables
+defined in all makefiles read up until that point. This includes
+variables which have empty values, as well as built-in variables
+(@pxref{Implicit Variables, , Variables Used by Implicit Rules}), but
+does not include any variables which are only defined in a
+target-specific context.
+
+@code{.VARIABLES} is so special that any value you assign to it will be
+ignored; it will always return its special value.
+@end table
+
@node Conditionals, Functions, Using Variables, Top
@chapter Conditional Parts of Makefiles
@@ -9770,7 +9844,7 @@
The directory part and the file-within-directory part of @code{$?}.
@end table
-These variables are used specially by GNU @code{make}:
+These variables are used or set specially by GNU @code{make}:
@table @code
@item MAKEFILES
@@ -9778,6 +9852,11 @@
Makefiles to be read on every invocation of @code{make}.@*
@xref{MAKEFILES Variable, ,The Variable @code{MAKEFILES}}.
+@item MAKEFILE_LIST
+
+Makefiles that @code{make} has actually started parsing yet.
+@xref{MAKEFILE_LIST Variable, ,The Variable @code{MAKEFILE_LIST}}.
+
@item VPATH
Directory search path for files not found in the current directory.@*
@@ -9823,6 +9902,10 @@
variable has no effect on the operation of @code{make}.@*
@xref{Goals, ,Arguments to Specify the Goals}.
+@item MAKE_VERSION
+
+The version number of @code{make}.
+
@item CURDIR
Set to the pathname of the current working directory (after all
@@ -9838,6 +9921,11 @@
Defines the naming of the libraries @code{make} searches for, and their
order.@*
@xref{Libraries/Search, ,Directory Search for Link Libraries}.
+
+@item .VARIABLES
+
+A list of all currently defined variables.
+@xref{Specials, ,Special Variables}.
@end table
@node Error Messages, Complex Makefile, Quick Reference, Top