Nick Ing-Simmons (PAUSE Custodial Account) > Make-1.00 > Make

Download:
Make-1.00.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  2
Open  1
View/Report Bugs
Module Version: 1.00   Source  

NAME ^

Make - module for processing makefiles

SYNOPSIS ^

        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;

DESCRIPTION ^

Make->new creates an object if new(Makefile => $file) is specified then it is parsed. If not the usual makefile Makefile sequence is used. (If GNU => 1 is passed to new then GNUmakefile is looked for first.)

$make->Make(target...) 'makes' the target(s) specified (or the first 'real' target in the makefile).

$make->Print can be used to 'print' to current select'ed stream a form of the makefile with all variables expanded.

$make->Script(target...) can be used to 'print' to current select'ed stream the equivalent bourne shell script that a make would perform i.e. the output of make -n.

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.

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...).

In addition to traditional

        .c.o : 
                $(CC) -c ...

GNU make's 'pattern' rules e.g.

        %.o : %.c 
                $(CC) -c ...

Likewise a subset of GNU makes $(function arg...) syntax is supported.

Via pmake Make has built perl/Tk from the MakeMaker generated Makefiles...

BUGS ^

At present new must always find a makefile, and $make->parse($file) can only be used to augment that file.

More attention needs to be given to using the package to write makefiles.

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.

Variables are probably substituted in different 'phases' of the process than in make(1) (or even GNU make), so 'clever' uses will probably not work.

UNIXisms abound.

SEE ALSO ^

pmake

AUTHOR ^

Nick Ing-Simmons

syntax highlighting: