version 1.56, 2003/09/04 22:14:43 |
version 1.57, 2003/09/29 11:35:11 |
|
|
.Nm |
.Nm |
may have running at any one time. |
may have running at any one time. |
Turns compatibility mode off, unless the |
Turns compatibility mode off, unless the |
.Ar B |
.Fl B |
flag is also specified. |
flag is also specified. |
.It Fl m Ar directory |
.It Fl m Ar directory |
Specify a directory in which to search for |
Specify a directory in which to search for |
|
|
Note that the use of several targets is merely a shorthand for duplicate |
Note that the use of several targets is merely a shorthand for duplicate |
rules. |
rules. |
Specifically, |
Specifically, |
.Bd -literal |
.Bd -literal -offset indent |
target1 target2: depa depb |
target1 target2: depa depb |
cmd1 |
cmd1 |
cmd2 |
cmd2 |
.Ed |
.Ed |
|
.Pp |
is just a short form of |
is just a short form of |
.Bd -literal |
.Bd -literal -offset indent |
target1: depa depb |
target1: depa depb |
cmd1 |
cmd1 |
cmd2 |
cmd2 |
|
|
.Pp |
.Pp |
.Nm |
.Nm |
does not support Solaris syntax for true multiple targets: |
does not support Solaris syntax for true multiple targets: |
.Bd -literal |
.Bd -literal -offset indent |
target1 + target2: depa depb |
target1 + target2: depa depb |
cmd1 |
cmd1 |
cmd2 |
cmd2 |
|
|
.Sq Ic \- |
.Sq Ic \- |
and/or |
and/or |
.Sq Ic + , |
.Sq Ic + , |
the command is treated specially. |
the command is treated specially: |
.Bl -tag -width `@' |
.Bl -tag -width `@' |
.It Sq Ic @ |
.It Sq Ic @ |
causes the command not to be echoed before it is executed. |
causes the command not to be echoed before it is executed. |
|
|
.It Sq Ic + |
.It Sq Ic + |
causes the command to be executed even if |
causes the command to be executed even if |
.Fl n |
.Fl n |
has been specified (This can be useful to debug recursive Makefiles). |
has been specified. |
|
(This can be useful to debug recursive Makefiles.) |
.El |
.El |
.Pp |
.Pp |
The command is always executed using |
The command is always executed using |
|
|
Any previous value is overridden. |
Any previous value is overridden. |
.It Ic \&:= |
.It Ic \&:= |
Assign with expansion, i.e., expand the value before assigning it |
Assign with expansion, i.e., expand the value before assigning it |
to the variable (extension) |
to the variable (extension). |
.It Ic \&+= |
.It Ic \&+= |
Append the value to the current value of the variable (extension). |
Append the value to the current value of the variable (extension). |
.It Ic \&?= |
.It Ic \&?= |
|
|
It is also set when there is an implied rule that matches the current |
It is also set when there is an implied rule that matches the current |
dependency in scope. |
dependency in scope. |
That is, in |
That is, in |
.Bd -literal |
.Bd -literal -offset indent |
\&.SUFFIXES: .c.o |
\&.SUFFIXES: .c.o |
file.o: file.c |
file.o: file.c |
cmd1 $< |
cmd1 $< |
|
|
\&.c.o: |
\&.c.o: |
cmd2 |
cmd2 |
.Ed |
.Ed |
|
.Pp |
building |
building |
.Pa file.o |
.Pa file.o |
will execute |
will execute |
|
|
.It Va .INCLUDES |
.It Va .INCLUDES |
See |
See |
.Ic .INCLUDES |
.Ic .INCLUDES |
special target |
special target. |
.It Va .LIBS |
.It Va .LIBS |
See |
See |
.Ic .LIBS |
.Ic .LIBS |
special target |
special target. |
.It Va MACHINE |
.It Va MACHINE |
Name of the machine architecture |
Name of the machine architecture |
.Nm |
.Nm |
|
|
.Pq Ql \&. |
.Pq Ql \&. |
character. |
character. |
Whitespace characters may follow this dot, e.g., |
Whitespace characters may follow this dot, e.g., |
.Bd -literal |
.Bd -literal -offset indent |
\&.include <file> |
\&.include <file> |
.Ed |
.Ed |
and |
and |
.Bd -literal |
.Bd -literal -offset indent -compact |
\&. include <file> |
\&. include <file> |
.Ed |
.Ed |
|
.Pp |
are identical constructs. |
are identical constructs. |
Files are included with either |
Files are included with either |
.Ql .include <file> |
.Ql .include <file> |
|
|
.IT Pa /usr/obj |
.IT Pa /usr/obj |
default |
default |
.Ev MAKEOBJDIRPREFIX |
.Ev MAKEOBJDIRPREFIX |
directory. |
directory |
.El |
.El |
.Sh SEE ALSO |
.Sh SEE ALSO |
.Xr mkdep 1 |
.Xr ed 1 , |
|
.Xr mkdep 1 , |
|
.Xr sh 1 , |
|
.Xr getcwd 3 , |
|
.Xr regex 3 , |
|
.Xr uname 3 |
.Pp |
.Pp |
.Rs |
.Rs |
.%T Make \- A Tutorial |
.%T Make \- A Tutorial |
|
|
.Nm |
.Nm |
silently ignores all commands after the first non empty set of commands, |
silently ignores all commands after the first non empty set of commands, |
e.g., in |
e.g., in |
.Bd -literal |
.Bd -literal -offset indent |
a: |
a: |
@echo "Executed" |
@echo "Executed" |
a: |
a: |
|
|
not the other way around, which doesn't work. |
not the other way around, which doesn't work. |
.Pp |
.Pp |
For loops are expanded before tests, so a fragment such as: |
For loops are expanded before tests, so a fragment such as: |
.Bd -literal |
.Bd -literal -offset indent |
\&.for TMACHINE in ${SHARED_ARCHS} |
\&.for TMACHINE in ${SHARED_ARCHS} |
\&.if ${TMACHINE} = ${MACHINE} |
\&.if ${TMACHINE} = ${MACHINE} |
... |
... |
|
|
may erroneously mark archive members as out of date if the archive name |
may erroneously mark archive members as out of date if the archive name |
was truncated. |
was truncated. |
.Pp |
.Pp |
The handling of ; and other special characters in tests may be utterly |
The handling of |
bogus. |
.Sq ;\& |
|
and other special characters in tests may be utterly bogus. |
For instance, in |
For instance, in |
.Bd -literal |
.Bd -literal -offset indent |
\&A=abcd;c.c |
\&A=abcd;c.c |
\&.if ${A:R} == "abcd;c" |
\&.if ${A:R} == "abcd;c" |
.Ed |
.Ed |
|
|
.Pp |
.Pp |
The conditional handler is incredibly lame. |
The conditional handler is incredibly lame. |
Junk such as |
Junk such as |
.Bd -literal |
|
\&.if defined anything goes (A) |
|
.Ed |
|
.Pp |
.Pp |
|
.Dl \&.if defined anything goes (A) |
|
.Pp |
will be accepted silently. |
will be accepted silently. |
.Pp |
.Pp |
In a .for loop, only the variable value is used, assignments will be |
In a .for loop, only the variable value is used; assignments will be |
evaluated later, e.g., in |
evaluated later, e.g., in |
.Bd -literal |
.Bd -literal -offset indent |
\&.for I in a b c d |
\&.for I in a b c d |
I:=${I:S/a/z} |
I:=${I:S/a/z} |
A+=$I |
A+=$I |
\&.endfor |
\&.endfor |
.Ed |
.Ed |
A will evaluate to a b c d after the loop, not z b c d. |
.Pp |
|
.Sq A |
|
will evaluate to a b c d after the loop, not z b c d. |
.Pp |
.Pp |
The |
The |
.Ql + |
.Ql + |