| Current File : //usr/local/share/man/man3/Make.3 |
.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
. ds C`
. ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{
. if \nF \{
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. if !\nF==2 \{
. nr % 0
. nr F 2
. \}
. \}
.\}
.rr rF
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{\
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
.\}
.if t \{\
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
.\}
. \" simple accents for nroff and troff
.if n \{\
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
.\}
.if t \{\
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o'bp'
. ds Th \o'LP'
. ds ae ae
. ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "Make 3"
.TH Make 3 "1999-04-12" "perl v5.20.0" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
Make \- module for processing makefiles
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 6
\& require Make;
\& my $make = Make\->new(...);
\& $make\->parse($file);
\& $make\->Script(@ARGV)
\& $make\->Make(@ARGV)
\& $make\->Print(@ARGV)
\&
\& my $targ = $make\->Target($name);
\& $targ\->colon([dependancy...],[command...]);
\& $targ\->dolon([dependancy...],[command...]);
\& my @depends = $targ\->colon\->depend;
\& my @commands = $targ\->colon\->command;
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Make\->new creates an object if \f(CW\*(C`new(Makefile => $file)\*(C'\fR is specified
then it is parsed. If not the usual makefile Makefile sequence is
used. (If \s-1GNU\s0 => 1 is passed to new then GNUmakefile is looked for first.)
.PP
\&\f(CW\*(C`$make\->Make(target...)\*(C'\fR 'makes' the target(s) specified
(or the first 'real' target in the makefile).
.PP
\&\f(CW\*(C`$make\->Print\*(C'\fR can be used to 'print' to current \f(CW\*(C`select\*(C'\fR'ed stream
a form of the makefile with all variables expanded.
.PP
\&\f(CW\*(C`$make\->Script(target...)\*(C'\fR can be used to 'print' to
current \f(CW\*(C`select\*(C'\fR'ed stream the equivalent bourne shell script
that a make would perform i.e. the output of \f(CW\*(C`make \-n\*(C'\fR.
.PP
There are other methods (used by parse) which can be used to add and
manipulate targets and their dependants. There is a hierarchy of classes
which is still evolving. These classes and their methods will be documented when
they are a little more stable.
.PP
The syntax of makefile accepted is reasonably generic, but I have not re-read
any documentation yet, rather I have implemented my own mental model of how
make works (then fixed it...).
.PP
In addition to traditional
.PP
.Vb 2
\& .c.o :
\& $(CC) \-c ...
.Ve
.PP
\&\s-1GNU\s0 make's 'pattern' rules e.g.
.PP
.Vb 2
\& %.o : %.c
\& $(CC) \-c ...
.Ve
.PP
Likewise a subset of \s-1GNU\s0 makes $(function arg...) syntax is supported.
.PP
Via pmake Make has built perl/Tk from the \f(CW\*(C`MakeMaker\*(C'\fR generated Makefiles...
.SH "BUGS"
.IX Header "BUGS"
At present \f(CW\*(C`new\*(C'\fR must always find a makefile, and
\&\f(CW\*(C`$make\->parse($file)\*(C'\fR can only be used to augment that file.
.PP
More attention needs to be given to using the package to \fIwrite\fR makefiles.
.PP
The rules for matching 'dot rules' e.g. .c.o and/or pattern rules e.g. %.o : %.c
are suspect. For example give a choice of .xs.o vs .xs.c + .c.o behaviour
seems a little odd.
.PP
Variables are probably substituted in different 'phases' of the process
than in \fImake\fR\|(1) (or even \s-1GNU\s0 make), so 'clever' uses will probably not
work.
.PP
UNIXisms abound.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
pmake
.SH "AUTHOR"
.IX Header "AUTHOR"
Nick Ing-Simmons