mirror of
https://salsa.debian.org/srivasta/make-dfsg.git
synced 2024-12-26 14:00:56 +00:00
Added more stuff about `foreach'.
This commit is contained in:
parent
8d8b42b086
commit
edacffc68d
1 changed files with 71 additions and 1 deletions
72
make.texinfo
72
make.texinfo
|
@ -6,7 +6,10 @@
|
||||||
$Header$
|
$Header$
|
||||||
|
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.53 1988/06/03 00:07:30 mcgrath
|
Revision 1.54 1988/06/10 11:43:00 mcgrath
|
||||||
|
Added more stuff about `foreach'.
|
||||||
|
|
||||||
|
Revision 1.53 88/06/03 00:07:30 mcgrath
|
||||||
* Fixed a typo in the `Missing' section.
|
* Fixed a typo in the `Missing' section.
|
||||||
* Added an example of how to replace the System V $$@ feature
|
* Added an example of how to replace the System V $$@ feature
|
||||||
using static pattern rules.
|
using static pattern rules.
|
||||||
|
@ -2713,6 +2716,73 @@ For this to work properly, you must use a recursively expanded variable, so
|
||||||
it will be expanded when the @code{foreach} function is invoked, not when
|
it will be expanded when the @code{foreach} function is invoked, not when
|
||||||
the variable is defined.@refill
|
the variable is defined.@refill
|
||||||
|
|
||||||
|
This simple example sets the variable @samp{files} to the list of
|
||||||
|
all files in the directories in the list @samp{dirs}.
|
||||||
|
|
||||||
|
@example
|
||||||
|
find_files = $(wildcard $(dir)/*)
|
||||||
|
dirs := a b c d
|
||||||
|
files := $(foreach dir,$(dirs),$(find_files))
|
||||||
|
@end example
|
||||||
|
|
||||||
|
Note that the variable @samp{find_files} is made recursive. It is then
|
||||||
|
used to perform a function that results in a value, rather than to simply
|
||||||
|
@emph{be} a value. This example has the same result (except for setting
|
||||||
|
@samp{find_files} and @samp{dirs}) as:
|
||||||
|
|
||||||
|
@example
|
||||||
|
files := $(wildcard a/* b/* c/* d/*)
|
||||||
|
dir =
|
||||||
|
@end example
|
||||||
|
|
||||||
|
The variable @samp{dir} is made a recursive variable with a null value by
|
||||||
|
virtue of not being set beforehand, and then being used in the
|
||||||
|
@code{foreach} function. If, before the invokation of @code{foreach},
|
||||||
|
@samp{dir} had been defined by the line:
|
||||||
|
|
||||||
|
@example
|
||||||
|
dir := foo
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
then it would have that same value and the property of being a simply
|
||||||
|
expanded variable after the @code{foreach} function was finished.
|
||||||
|
Note also that @samp{dir} would remain a simply expanded variable
|
||||||
|
throughout the invokation of @code{foreach}.
|
||||||
|
|
||||||
|
Because it is expanded before other processing is done, the @var{var}
|
||||||
|
argument to @code{foreach} need not be a variable name. It can be a
|
||||||
|
variable expression resulting in the name. Thus,
|
||||||
|
|
||||||
|
@example
|
||||||
|
dir := a
|
||||||
|
var = $(whatsthevar)
|
||||||
|
foo := dar
|
||||||
|
whatsthevar := $(subst a,i,$(foo))
|
||||||
|
files := $(foreach $(var),$(dirs),$(find_files))
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
is ultimately equivalent to the first example. You must take care when
|
||||||
|
using complex variable expressions that result in variable names because
|
||||||
|
many strange things are legal variable names, and these might not be what
|
||||||
|
you intended. For example,
|
||||||
|
|
||||||
|
@example
|
||||||
|
files := $(foreach Es escrito en espanol!,b c ch,$(find_files))
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
will work as expected if @samp{find_files} references the variable
|
||||||
|
@samp{Es escrito en espanol!} (es un nombre bastante largo, no?), but
|
||||||
|
somehow this seems unlikely (pero qualquiera cosa es posible).
|
||||||
|
You might be inclined to use variable names such as this so as not to
|
||||||
|
disturb other variables, because variables with names containing whitespace
|
||||||
|
can be referenced but not defined in the conventional manner
|
||||||
|
(@pxref{Defining}). But this is not necessary, since the @code{foreach}
|
||||||
|
function always preserves the value and flavor (@pxref{Flavors}) of its
|
||||||
|
control variable (the one named by the @var{var} argument).@refill
|
||||||
|
|
||||||
@node Filename Functions,, Foreach Function, Functions
|
@node Filename Functions,, Foreach Function, Functions
|
||||||
@section Functions for File Names
|
@section Functions for File Names
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue